私はxmlhttprequestによるcookieの管理を誤解していると思います。 JavaScriptで作成されたXMLHttpRequest
に応答するサーバーがあります。このサーバーは、正しい値を含むAllow-Control-Access-Origin
、Access-Control-Allow-Headers
、Access-Control-Expose-Headers
およびAccess-Control-Allow-Credentials
ヘッダーを返します。
私はjavascriptを使用してサーバーでダイジェスト認証を行っていますが、問題はありません。サーバーからWWW-Authenticate
ヘッダーを受け取り、処理して、すべてのダイジェスト応答とすべてを含む承認ヘッダーをサーバーに送信します。 。問題は、ダイジェストチャレンジが成功すると、サーバーがSet-Cookieヘッダーを返すため、それを取得し、残りのすべてのxhrリクエストに追加する必要があることです。ブラウザ(ChromiumとChromeを使用)では、ヘッダーにアクセスできません。
xhr.getResponseHeader("Set-Cookie");
XMLHTTPREQUEST Level 2 では、「フィールド名がSet-CookieまたはSet-Cookie2のヘッダーを除いて、応答からすべてのヘッダーを返します」とわかりました。しかし、方法は何ですか? CookieにChrome Apiを使用しますが(現時点ではそれについて注意書きを読みません))可能な限り標準的な方法で実行したいと思います。
xhr.withCredentials = true;
つまり、ブラウザは自動的にset-cookieを取得し、cookieヘッダーで送信しますか?
CORS仕様から http://www.w3.org/TR/cors/#make-a-request-steps :
Make a requestステップが適用されるときはいつでも、手動リダイレクトフラグを設定して、OriginソースOriginからリクエストURLをフェッチします。また、クレデンシャルフラグが設定されていない場合は、cookieフラグを設定します。メソッドリクエストメソッド、エンティティボディリクエストエンティティボディ(作成者リクエストヘッダーを含む)を使用し、クレデンシャルの除外フラグが設定されていない場合はユーザークレデンシャルを含めます。ソースOriginがグローバルに一意の識別子である場合、Refererヘッダーを除外します。
あなたが正しく言うように-withCredentials
を使用する場合、クッキーはブラウザによって追加されます。