这里主要描述跨域的一些细节
set-cookie
浏览器在请求一个设置 session 的接口,如果和当前域名不一致,则出现上述这种情况
比如当前浏览器访问地址:http://www.example.com
如果请求接口:http://www.test.com/api
,那么就会出现上述提示,这种提示就表明了该接口下的 cookie 没有正常写入,即 cookie 写入失败
解决方案: - session 配置设置如下go session.Options(sessions.Options{MaxAge: 3600 * 12, Path: "/", HttpOnly: true, SameSite: http.SameSiteNoneMode, Secure: true})
- 请求接口使用https
即访问地址:https://www.test.com/api
,那么 cookie 就可以正常写入了
但是内部系统,往往没有使用 https,如果还需要这种情况进行 cookie 写入,就可以考虑自动提交 form 表单
1 | // form提交js代码说明 |
这样,cookie 就正常在www.test.com
这个域名下写入了,这个时候别忘了加个回调地址,再重定向回原来访问的页面
已经注入 cookie,跨域请求时,cookie 协带说明
通常,我们使用 fetch 函数请求接口,服务端解除跨域限制且支持 cookie 接收,一般这样设置
前端
1 | fetch("http://www.test.com/api/list", { |
后端
1 | // c表示 *gin.Context |
但是注意,这个时候,你的 cookie 并没有带到后端,因为浏览器访问的地址是
http://www.example.com
,但是请求的接口是http://www.test.com/api/list
,也就说,
http://www.test.com/api/
这里的 cookie 写入,肯定是在.test.com
这个域名下的,而由于当前访问的域名是.example.com
,这个时候 cookie 就没有办法带过去只有请求这种地址的跨域是可以的
http://api.example.com/list