1. HTTP Referer

HTTP referer (本来是 referrer 的拼写错误) 是一个可选的 HTTP 头部字段, 用于标记链接到请求资源的网页的地址(即 URI 或者 IRI)。通过检查 referrer,新的网页可以知道请求的来源。

Iris 使用 Shopify's goreferrer 包来实现 Context.GetReferrer() 方法。

GetReferrer 方法提取和返回 Referer 头的信息,Referer 通过 https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Referrer-Policy 或者 URL 的 referer 查询参数(query parameter)指定。

GetReferrer() Referrer

Referrer 是这样的:

type (
    Referrer struct {
        Type       ReferrerType
        Label      string
        URL        string
        Subdomain  string
        Domain     string
        Tld        string         
        Path       string              
        Query      string                 
        GoogleType ReferrerGoogleSearchType
    }

ReferrerTypeReferrer.Type 值( indirectdirectemailsearchsocial)的枚举。可以的类型有:

  • ReferrerInvalid
  • ReferrerIndirect
  • ReferrerDirect
  • ReferrerEmail
  • ReferrerSearch
  • ReferrerSocial

GoogleType 可以是下列之一:

  • ReferrerNotGoogleSearch
  • ReferrerGoogleOrganicSearch
  • ReferrerGoogleAdwords

1.1.1. 示例

package main

import "github.com/kataras/iris/v12"

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"))
}

curl

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

results matching ""

    No results matching ""