gin.Context
也是放了一些和输入输出有关的字段.
type Context struct {
writermem responseWriter
Request *http.Request
Writer ResponseWriter
Params Params
handlers HandlersChain
index int8
fullPath string
engine *Engine
params *Params
skippedNodes *[]skippedNode
mu sync.RWMutex
Keys map[string]any
Errors errorMsgs
Accepted []string
queryCache url.Values
formCache url.Values
// SameSite allows a server to define a cookie attribute making it impossible for
// the browser to send this cookie along with cross-site requests.
sameSite http.SameSite
}
Context.Writer
:(其类型为gin.ResponseWriter
接口,实际上是gin.responseWriter
类型)封装了原生的http.ResponseWriter
,但是使用了原生的http.Request
.Context.handlers
:责任链Context.engine
:实现了HTTP ServerContext.formCache
:表单数据的缓存Context.queryCache
:url参数的缓存- 这种缓存避免了重复读取和解析的开销
Context.sameSite
:其类型为原生的http.SameSite
类型,该字段的作用见附录.- 有一种观点认为,关于cookie的设置,既不应该在Context层面上设置,也不应该在Server层面上设置,而是应该让用户自行在输出cookie时设置.换言之,中间件不需要提供这个设置
type SameSite int
const (
SameSiteDefaultMode SameSite = iota + 1
SameSiteLaxMode
SameSiteStrictMode
SameSiteNoneMode
)
gin.Context
中根据Key读取指定数据的方法
gin.Context
中从不同部位读取数据的方法
gin.Context
中将输入(整个body)转化为一个具体的对象的方法
gin.Context
中返回具体格式响应的方法
gin.Context
还控制了Handler的调度(想想第一周讲过的gin中的责任链),因此gin.Context
中还有中断或继续后续Handler执行的方法
gin.Context
中渲染页面的方法
SameSite
属性用于控制您的网站如何将cookie设置为与跨站点请求一起发送.它可以帮助减少CSRF(跨站请求伪造)攻击的风险,并且可以用于您的网站的cookie防御策略的一部分.SameSite
属性可以有以下值:
Strict
:这个值会阻止cookie跟随跨站点请求被发送.这意味着如果用户在另一个网站上点击导向您网站的链接,cookie将不会被发送,这可能会阻止用户从外部网站登录或使用您网站的功能Lax
:类似于Strict
,但是当用户从另一个网站导航到您的网站时,例如通过点击一个链接,cookie会被发送.这提供了一个折中的方式,既提供了一定级别的CSRF保护,同时又允许一些跨站点请求,例如从其他网站的链接点击None
:这个值会允许cookie在所有跨站点请求中发送.如果设置为None
,必须同时将Secure
属性设置为true
,这样cookie只会通过安全的HTTPS连接发送
默认情况下,如果没有明确设置SameSite
属性,大多数现代浏览器会将其视为Lax
.这是为了提高网络的整体安全性,但开发者需要了解这一点,因为它可能会影响跨站点登录和集成的行为