HTTP 重定向 (302) 在以下 GET 请求中不使用 Cookie

Sie*_*ski 4 cookies redirect get http setcookie

这是我已经研究了一段时间的一个问题。

我有一个重定向似乎不尊重 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
Run Code Online (Sandbox Code Playgroud)

我只是对内容进行了一些消毒,但不应该修改任何重要的内容。关键是无论我使用什么浏览器,cookie 'foo' 都不会放在 302 之后的 GET 请求中。从我读到的内容来看,这不是预期的行为。我相信这一点是错误的吗?302 有什么我遗漏或做错的地方吗?

sha*_*ncs 7

在问题中,Cookie标头未出现在重定向的 HTTP 请求 ( GET http://192.168.1.1:8888/home) 中。根本原因是:cookiefoo=test_data永远不存在。当它通过Set-Cookie响应头从服务器传递时,它会被浏览器拒绝,因为它Domain不包含原始服务器。

根据MDN

属于不包含源服务器的域的 cookie应该被用户代理拒绝。如果以下 cookie 是由 originalcompany.com 上托管的服务器设置的,则将被拒绝。

设置 Cookie:qwerty=219ffwef9w0f;域=somecompany.co.uk; 路径=/;到期日 = 2019 年 8 月 30 日星期三 00:00:00 GMT

更准确的描述可以查看RFC6265部分-4.1.2.3

这是有充分理由设计的。如果所有服务器都可以Set-Cookie用于所有域,那么清除其他网站的cookie将非常容易,这对互联网来说将是一场灾难。