Cookie不会在HTTP GET上发送

时间:2018-01-24 13:03:13

标签: google-chrome http cookies

我正在使用仅限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

Cookies Set

GET请求不包含任何内容。我扔了404,因为我找不到cookie值。

Patch Working, sending cookies as expected

1 个答案:

答案 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的域