【问题标题】:Chrome not setting cookie on AJAX POSTChrome 未在 AJAX POST 上设置 cookie
【发布时间】:2016-02-07 18:33:56
【问题描述】:

我对我的网络服务进行了 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 上的完全限定域名。

【问题讨论】:

    标签: ajax google-chrome cookies


    【解决方案1】:

    找到解决方案:

    您已发送带有凭据的请求(XMLHttpRequest.withCredentials 或例如credentials: 'include' for whatwg fetch)。

    即使这是没有意义的,因为您正在登录并且没有任何/有无效的 cookie,它会使 Chrome 从返回的答案中存储 cookie。 ¯\_(ツ)_/¯

    正如@Anne 所指出的,XMLHTTPRequest 规范实际上要求用户代理忽略返回的 cookie,除非指定了withCredentialshttp://www.w3.org/TR/XMLHttpRequest/#the-withcredentials-attribute

    【讨论】:

    • 实际上并非毫无意义。凭据设置同时控制传出和传入凭据。
    • 所以基本上 FF 和 Safari 有错误的实现?
    猜你喜欢
    • 2011-11-03
    • 2023-03-17
    • 2021-11-03
    • 2011-11-12
    • 1970-01-01
    • 2015-09-12
    • 2017-04-01
    • 2020-11-27
    相关资源
    最近更新 更多