问题的原因应该是:localhost与127.0.0.1混用了!!!
问题详情:
在使用Gin写Go项目时,通过Swagger接口文档进行简单测试时,发现服务器端成功设置的SetCookie已经响应至浏览器端,在浏览器的“响应标头”中也看到了服务器设置的Set-Cookie,但是Set-Cookie中的内容并没有存储到浏览器的应用(Application)下的Cookie中,导致浏览器再次请求服务器时,服务器端无法获取到之前已设置的Cookie。
下图可以看到“浏览器的响应标头中的Set-Cookie”:
而浏览器的应用(Application)下的Cookie中没有内容
通过一系列的分析,发现了问题的原因应该是:localhost与127.0.0.1混用了!!!
我的问题出在了这里,我通过 127.0.0.1 访问的 Swagger 文档,而 Swagger 文档中请求服务端的接口要求使用的是 localhost,
打开F12 可以看到调用接口后的请求标头中Origin是127.0.0.1
问题解决:
把通过 127.0.0.1 访问的 Swagger 文档换成了 localhost 访问
然后调用对应的接口,可以看到请求标头中的Origin已经是localhost
此时,在应用下的Cookie中已经成功存储了服务器端响应的cookie。
总结:在设置Cookie时,Origin表示请求的来源域名,它通常与当前网页的域名相同,如果Origin与Access-Control-Allow-Origin不一致,将会导致跨域请求失败或出现安全问题。因此,在设置Cookie时,需要确保请求头中的Origin与Access-Control-Allow-Origin保持一致,以避免跨域问题。
(未完全搞明白 Origin 和 Access-Control-Allow-Origin)