簡體   English   中英

Javascript 提取未發送 Cookie Header (CORS)

[英]Javascript fetch is not sending Cookie Header (CORS)

我正在嘗試將 Cookies 發送到 javascript 獲取 Z5A8FEFF0B4BDE3EEC9244B76023 請求中的 PHP 腳本請求從https://sub1.example.com開始,包含以下選項:

let response = await fetch('https://sub2.example.com/target.php', {
    method: "POST",
    headers: headers,
    body: formData,
    mode: 'cors',
    credentials: 'include',
    cache: 'no-store'
});

相應的 PHP 腳本設置以下標頭:

header('Access-Control-Allow-Origin: https://www.example.com');
header('Access-Control-Allow-Methods: POST, OPTIONS');
header('Access-Control-Allow-Credentials: true');
header('Access-Control-Allow-Headers: Origin, Content-Type, Accept, Authorization, X-Request-With, Set-Cookie, Cookie, Bearer');

但是 Cookie Header 不會隨請求一起發送。 我也試過:

let headers = new Headers();
headers.set('Cookie', document.cookie);

那也沒有效果。 我在這里到底做錯了什么?

我檢查了開發工具中的網絡選項卡。 PHP 腳本中的$_COOKIE也是空的。 絕對沒有錯誤。 我還可以看到 Cookie Header 是在任何非 CORS fetch請求中發送的。

編輯:這是 Cookies 之一的設置:

Name: PHPSESSID
Path: /
Secure: true
SameSite: none

我無法共享域,因為它不是公開的。 但是 Cookie 域與請求 Header 中的 Origin 具有相同的值(減去 https://)。

編輯 2:更改了 fetch URL 以使發生的事情更清楚。

問題

請注意,取決於

  • cookie 的Path屬性的值,
  • cookie 的Domain屬性的值,
  • cookie 的Secure屬性的值,
  • cookie 的SameSite屬性的有效值,
  • 請求的發出和目的地來源,

cookie 可能會或可能不會附加到請求。 與您的案例特別相關的是Domain屬性; 查看MDN 的主題頁面

Domain屬性指定哪些主機可以接收 cookie。 如果未指定,則該屬性默認為設置 cookie 的同一主機,不包括 subdomains 如果指定了Domain始終包含子域。 因此,指定Domain比省略它的限制要小。 但是,當子域需要共享有關用戶的信息時,它會很有幫助。

您在原點https://sub1.example.com上設置 cookie 如下:

Set-Cookie: PHPSESSID=whatever; Path=/; SameSite=None; Secure

因此,該 cookie 將附加到目標來源為https://sub1.example.com的(經過認證的)請求,而不是其他請求。

解決方案

如果您希望將 cookie 發送到其域為example.com子域的所有安全源,則需要將其Domain顯式設置為example.com


關於用fetch發送 cookies

Fetch 標准指定了一個禁止的 header 名稱列表; Cookie就是其中之一。 您不能在使用fetch發送的請求上設置名為Cookie的 header ; 標准只是禁止它 如果要將現有的 cookies 附加到跨域請求,請使用fetch選項中傳遞credentials參數的'include'

Cookies 通常不應該附加到 CORS 模式下的預檢請求。 你可能想看看這個。

注意:無論此設置如何,瀏覽器都不應在預檢請求中發送憑據。 有關詳細信息,請參閱:CORS > 帶有憑據的請求。

https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API/Using_Fetch

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM