进阶 www.iris-go.com 2026-10-20 02:39:14 · 18 阅读

第32章 HTTP Referrer处理

# 第32章 HTTP Referrer 了解如何在 Iris 中处理 HTTP referrer 信息。 ## 基础 Referrer 处理 package main import "github.com/kataras/iris/v12" func main() { app := iris.New() app.Get("/referrer", func(ctx iris.Context) { // 获取 referrer URL referrer := ctx.GetReferrer() ctx.JSON(iris.Map{ "referrer": referrer.URL, "type": referrer.Type, }) }) app.Listen(":8080") } 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
## Referrer 类型 app.Get("/referrer-type", func(ctx iris.Context) { referrer := ctx.GetReferrer() // 判断 referrer 类型 switch referrer.Type { case iris.ReferrerSearch: ctx.WriteString("来自搜索引擎") case iris.ReferrerSocial: ctx.WriteString("来自社交媒体") case iris.ReferrerIndirect: ctx.WriteString("间接流量") case iris.ReferrerEmail: ctx.WriteString("来自邮件") default: ctx.WriteString("直接流量") } }) 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
## Referrer 策略 app.Use(func(ctx iris.Context) { // 设置 referrer 策略 ctx.Header("Referrer-Policy", "strict-origin-when-cross-origin") ctx.Next() }) app.Get("/secure", func(ctx iris.Context) { referrer := ctx.GetReferrer() if referrer.Type == iris.ReferrerIndirect { ctx.WriteString("外部 referrer") } else { ctx.WriteString("内部 referrer") } }) 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
## Referrer 校验 func validateReferrer(ctx iris.Context) bool { referrer := ctx.GetReferrer() allowedDomains := []string{ "example.com", "trusted-site.com", } for _, domain := range allowedDomains { if strings.Contains(referrer.URL, domain) { return true } } return false } app.Get("/protected", func(ctx iris.Context) { if !validateReferrer(ctx) { ctx.StopWithStatus(iris.StatusForbidden) return } ctx.WriteString("允许访问") }) 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
最佳实践 ​ 安全:验证 referrer、设置正确策略、处理缺失值、监控访问、记录可疑模式 实施:检查所有类型、处理空值、记录策略、充分测试、遵循标准 性能:缓存验证、优化检查、监控影响、处理超时、清理资源 维护:更新策略、监控使用情况、记录变更、定期测试、审查安全

评论 (0)