这是我一直在研究一段时间的问题。
我有一个重定向,似乎不尊重302重定向中的Set-Cookie属性。
以下是我使用wireshark获取的请求和响应标头。
HTTP/1.1 302 Moved Temporarily\r\n
Connection: close\r\n
Location: http://192.168.1.1:8888/home/\r\n
Set-Cookie: foo=test_data; Domain=192.168.1.1; Path=/\r\n
\r\n
GET /home/ HTTP/1.1\r\n
Host: 192.168.1.1:8888\r\n
Connection: keep-alive\r\n
Upgrade-Insecure-Requests: 1\r\n
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36\r\n
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8\r\n
Accept-Encoding: gzip, deflate\r\n
Accept-Language: en-US,en;q=0.8\r\n
DNT: 1\r\n
\r\n
我对内容进行了一些清理,但不应该修改任何关键内容。关键在于我使用的浏览器,在'302'之后的GET请求中没有放入cookie'foo'。从我所看到的,这不是预期的行为。我不相信这个吗?是否有一些我错过或错误的302?
答案 0 :(得分:1)
在问题中,Cookie
标头未出现在重定向的HTTP请求(GET http://192.168.1.1:8888/home
)中。根本原因是:cookie foo=test_data
永远不存在。当它通过Set-Cookie
响应标头从服务器传递时,它将被浏览器拒绝,因为它的Domain
不包括原始服务器。
根据MDN:
属于不包含原始服务器的域的cookie应被用户代理拒绝。如果由原始公司托管的服务器设置,则以下cookie将被拒绝。
Set-Cookie:qwerty = 219ffwef9w0f;域= somecompany.co.uk;路径= /;到期日= 2019年8月30日星期三00:00:00 GMT
要获得更准确的说明,您可以查看RFC6265 section -4.1.2.3
这是有充分理由的。如果所有域名的所有服务器都可以Set-Cookie
,则可以非常轻松地清除其他网站的cookie,这对互联网来说将是一场灾难。