我对我的网络服务执行了一个 AJAX POST,它在响应中设置了 2 个 cookie,但 Chrome 没有设置它们。然而,Safari 和 Firefox 可以。
请求如下:
POST /api/login HTTP/1.1
Host: 0.0.0.0:8080
Connection: keep-alive
Content-Length: 50
accept: application/json
Origin: http://0.0.0.0:8080
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.80 Safari/537.36
content-type: application/json
Referer: http://0.0.0.0:8080/form
Accept-Encoding: gzip, deflate
Accept-Language: en-US,en;q=0.8,nl;q=0.6,de;q=0.4,fr;q=0.2,pl;q=0.2
响应:
HTTP/1.1 200 OK
X-Powered-By: Express
Vary: X-HTTP-Method-Override, Accept-Encoding
x-frame-options: sameorigin
set-cookie: keystone.uid=s%3A55efe88923f753865f7a0985%3Ac5aT64aih9lxXi%2BNiSMr1rUJW4kzWyyNUforvUOrckk.JovuV%2FqeoQ32PiuyNPAZ7JcbIxXBcBvj%2FWFp8vf3SQQ; Path=/; HttpOnly
set-cookie: keystone.sid=s%3ADcv5el-TjLRkOSH9vNbvxQoOai-SQj-3.ZTfPFwEZp5mdVHSDZTukO%2FnrDnSpGU3OMW3tQu%2FSz7U; Path=/; HttpOnly
Content-Type: application/json; charset=utf-8
Content-Length: 224
ETag: W/"e0-B6OeRPdDEP0WPVdlZHqarA"
Date: Fri, 06 Nov 2015 14:39:37 GMT
Connection: keep-alive
我没主意了。这也不适用于端口 80 上的完全限定域名。
最佳答案
找到解决方案:
您已发送带有凭据的请求(XMLHttpRequest.withCredentials
或例如 credentials: 'include'
for whatwg fetch)。
尽管这是毫无意义的,因为您正在登录并且没有任何/有无效的 cookie,它会使 Chrome 存储来自返回答案的 cookie。 ¯\_(ツ)_/¯
正如@Anne 所指出的,XMLHTTPRequest
规范实际上要求用户代理忽略返回的 cookie,除非指定了 withCredentials
。 http://www.w3.org/TR/XMLHttpRequest/#the-withcredentials-attribute
关于ajax - Chrome 没有在 AJAX POST 上设置 cookie,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33569731/