我正在使用 HTTP Only(并且在生产中是安全的)cookie 来通过后端 API 维护用户身份验证状态。
但是,我遇到了一个问题,即 Cookie 未在 HTTP GET 请求上发送。 POST 和 PATCH 请求完美运行,但获取缺少 Cookies 请求 header 。
我没有看到这是作为标准一部分的特定限制。 Mozilla 文档明确有一个包含 Cookies 的 GET 请求示例? https://developer.mozilla.org/en-US/docs/Web/HTTP/Cookies
作为上下文,我目前正在开发中,因此在“本地主机”上运行并使用 Chrome 63.0.3239.132。
编辑:添加图片
所以在应用程序中设置了cookie
PATCH 请求按预期发送 Cookie
GET 请求不包含任何内容。我抛出了 404,因为我找不到 cookie 值。
最佳答案
问题出在使用 JQuery 发出 AJAX 请求的 javascript(实际上是 Typescript)代码。
Cookie 被视为凭证,因此 XHR 请求必须允许 withCredentials=true
。
let ajax = this.jQuery.ajax({
type: "GET",
url: getUrl,
headers: this.generateHeaders(),
xhrFields: {
withCredentials: true // this was false.
},
timeout: this.options.RequestTimeoutMs
});
更改 withCredentials
字段后,发送了 cookie!
旁注:关于withCredentials
。您将需要 CORS 设置来允许此操作,特别是 Access-Control-Allow-Credentials:true
此时您不能使用 Access-Control-Allow-Origin:*
(不是无论如何是个好主意)但必须指定没有尾随 /'s
关于google-chrome - Cookie 不会在 HTTP GET 上发送,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48423214/