我正在使用仅限HTTP(并且在生产中安全)cookie来维护使用后端API的用户身份验证状态。
我遇到了一个问题,但是没有在HTTP GET请求上发送Cookie。 POST和PATCH请求完美地工作,但是获取缺少Cookies请求标题。
作为标准的一部分,我没有看到这是一个特定的限制。 Mozilla文档明确地有一个包含Cookie的GET请求示例? here
作为上下文,我目前正在开发中,因此在“localhost”上运行并使用Chrome 63.0.3239.132。
修改:添加了图片
因此在应用程序中设置了cookie
https://developer.mozilla.org/en-US/docs/Web/HTTP/Cookies
PATCH请求按预期发送Cookie
GET请求不包含任何内容。我扔了404,因为我找不到cookie值。
答案 0 :(得分:2)
问题在于javascript(实际上是Typescript)代码使用JQuery发出AJAX请求。
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
的域