add HTTP Referer section

Gerasimos (Makis) Maropoulos 2019-07-20 19:14:28 +03:00
parent 02749e1753
commit 2c0d9cd365
No known key found for this signature in database
GPG Key ID: F169457BBDA4ACF4
3 changed files with 85 additions and 0 deletions

83
HTTP-referer.md Normal file

@ -0,0 +1,83 @@
The HTTP referer is an optional HTTP header field that identifies the address of the webpage (i.e. the URI or IRI) which is linked to the resource being requested. By checking the referrer, the new webpage can see where the request originated.
Read more at [wikipedia](https://en.wikipedia.org/wiki/HTTP_referer)
--------
Iris uses the [Shopify's goreferrer](https://github.com/Shopify/goreferrer/pull/27) package to expose the `Context.GetReferrer()` method.
The `GetReferrer` Context's method extracts and returns the information from the `"Referer"` header as specified in https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Referrer-Policy or by the URL `query parameter "referer"`.
```go
GetReferrer() Referrer
```
Which `Referrer` looks like that:
```go
type (
Referrer struct {
Type ReferrerType
Label string
URL string
Subdomain string
Domain string
Tld string
Path string
Query string
GoogleType ReferrerGoogleSearchType
}
```
The `ReferrerType` is the enum for a Referrer.Type value (indirect, direct, email, search, social). The available types are:
```go
ReferrerInvalid
ReferrerIndirect
ReferrerDirect
ReferrerEmail
ReferrerSearch
ReferrerSocial
```
The `GoogleType` can be one of those:
```go
ReferrerNotGoogleSearch
ReferrerGoogleOrganicSearch
ReferrerGoogleAdwords
```
## Example
```go
package main
import "github.com/kataras/iris"
func main() {
app := iris.New()
app.Get("/", func(ctx iris.Context) {
r := ctx.GetReferrer()
switch r.Type {
case iris.ReferrerSearch:
ctx.Writef("Search %s: %s\n", r.Label, r.Query)
ctx.Writef("Google: %s\n", r.GoogleType)
case iris.ReferrerSocial:
ctx.Writef("Social %s\n", r.Label)
case iris.ReferrerIndirect:
ctx.Writef("Indirect: %s\n", r.URL)
}
})
app.Run(iris.Addr(":8080"))
}
```
How to `curl`:
```sh
curl http://localhost:8080?referer=https://twitter.com/Xinterio/status/1023566830974251008
curl http://localhost:8080?referer=https://www.google.com/search?q=Top+6+golang+web+frameworks&oq=Top+6+golang+web+frameworks
```

@ -19,6 +19,7 @@ This wiki is the main source of documentation for **developers** working with (o
* [[Wrap the Router|Routing-wrap-the-router]] * [[Wrap the Router|Routing-wrap-the-router]]
* [[Override Context|Routing-override-context]] * [[Override Context|Routing-override-context]]
* [[API Versioning]] * [[API Versioning]]
* [[HTTP Referer]]
* [[Request Authentication]] * [[Request Authentication]]
* [[URL Query Parameters]] * [[URL Query Parameters]]
* [[Forms]] * [[Forms]]

@ -14,6 +14,7 @@
* [[Wrap the Router|Routing-wrap-the-router]] * [[Wrap the Router|Routing-wrap-the-router]]
* [[Override Context|Routing-override-context]] * [[Override Context|Routing-override-context]]
* [[API Versioning]] * [[API Versioning]]
* [[HTTP Referer]]
* [[Request Authentication]] * [[Request Authentication]]
* [[URL Query Parameters]] * [[URL Query Parameters]]
* [[Forms]] * [[Forms]]