これが以前にさまざまな形で尋ねられたことは知っていますが、問題を回避できないようです。jQuery とネイティブ JS API の両方を使用して Ajax リクエストを作成しようとしました。
私の状況は次のとおりです(添付の図を参照):
- ブラウザが HTTP リクエストを行う
- サーバーが応答し、永続的な Cookie を設定します
- ブラウザは HTTP Ajax リクエストを行います。Cookie は問題ありません
- サーバーは期待どおりに応答し、Cookie を更新します
- ブラウザが HTTPS Ajax リクエストを行い、Cookie がなくなった (?!)
- Cookie がないため、サーバーは「デフォルト」の応答を返します (意図しない動作)。
クロスドメイン リクエストに関する講義を始める前に、いくつかのことを述べさせてください。
- これがクロスドメイン リクエスト (異なるプロトコル) であることはわかっています。そのため、サーバーはレスポンスにヘッダーを設定します(そして、 CORS
Access-Control-Allow-Origin
をサポートする Chrome と Firefox を使用しています) 。 - ただし、ホストが同じであるため、HTTP cookie は HTTPS 経由で管理できる必要があることも知っています (こちらを参照)。
- (編集) Cookie は一般的なドメイン (.domain.ext など) に対して適切に設定されており、HttpOnly フラグも Secure フラグも設定されていません。
では、HTTPS Ajax 呼び出しを行うときにブラウザーが Cookie を渡さないのはなぜでしょうか? 何か案は?正気を失いそう…
+-----------+ HTTP Request +-----------+
|Browser |+---------------->|Server |
+-----------+ +-----------+
HTTP Response
<----------------+
Set-cookie
Ajax HTTP Req.
+---------------->
Cookie (OK)
HTTP Response
<----------------+
Set-cookie (OK)
Ajax HTTPS Req.
+---------------->
No Cookie (!!!)