web-dev-qa-db-ja.com

ブラウザでset-cookieヘッダーが無視され、fetchを使用したAjax呼び出しからcookieが保存されないのはなぜですか?

何らかの理由で、 (fetch apiリクエストをする

ブラウザにURLを入力するだけで同じGET呼び出しを行うと、(同一の)set-cookie応答ヘッダーがブラウザによって尊重され、Cookieが保存されます。

LiveHeadersとChromeネットワークインスペクターを介してリクエストとレスポンスのヘッダーを検査しましたが、違いはありません。

編集:明確にするために、これはサーバーにクッキーを送信するajaxの問題ではありません。応答が有効なset-cookiesヘッダーとともに返されたときに、ブラウザーによってcookieがまったく保存されないという問題です(ドキュメントによれば、ajaxかどうかに関係なく尊重されます)。

20
Peter

多くのヘッドバンギングの後、リクエストの「credentials」プロパティを「include」に設定することでこの問題を解決しました。私はこれがフェッチ要求でのサーバーへのCookieの送信を制御するだけであるという印象を受けましたが、明らかに、少なくとも私が使用している実装では、設定されていない場合、Cookieが送信されたときに保存されないことも意味しますサーバー。

https://fetch.spec.whatwg.org/ の仕様から

要求には、「省略」、「同じ起源」、または「含める」の資格情報モードが関連付けられています。特に明記しない限り、それは「省略」です。

要求の資格情報モードは、フェッチ中の資格情報のフローを制御します。要求のモードが「ナビゲート」の場合、その資格情報モードは「含める」と見なされ、フェッチは現在他の値を考慮していません。ここでHTMLが変更された場合、この標準には対応する変更が必要になります。

資格情報は、HTTP Cookie、TLSクライアント証明書、および認証エントリです。

21
Peter