web-dev-qa-db-ja.com

xmlhttprequestとset-cookie&cookie

私はxmlhttprequestによるcookieの管理を誤解していると思います。 JavaScriptで作成されたXMLHttpRequestに応答するサーバーがあります。このサーバーは、正しい値を含むAllow-Control-Access-OriginAccess-Control-Allow-HeadersAccess-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ヘッダーで送信しますか?

16
Kalamarico

CORS仕様から http://www.w3.org/TR/cors/#make-a-request-steps

Make a requestステップが適用されるときはいつでも、手動リダイレクトフラグを設定して、OriginソースOriginからリクエストURLをフェッチします。また、クレデンシャルフラグが設定されていない場合は、cookieフラグを設定します。メソッドリクエストメソッド、エンティティボディリクエストエンティティボディ(作成者リクエストヘッダーを含む)を使用し、クレデンシャルの除外フラグが設定されていない場合はユーザークレデンシャルを含めます。ソースOriginがグローバルに一意の識別子である場合、Refererヘッダーを除外します。

あなたが正しく言うように-withCredentialsを使用する場合、クッキーはブラウザによって追加されます。

16
Artem Oboturov