すべてのWebリクエストがブラウザのCookieを送信しますか?
ページビューではなく、画像や.js
ファイルなどのリクエストです。
更新 Webページに50の要素がある場合、それは50のリクエストです。リクエストごとに同じCookieを送信するのはなぜですか。キャッシュされていないか、すでにあることを知っていますか?
すべてのWebリクエストがブラウザのCookieを送信しますか?
ページビューではなく、画像や.js
ファイルなどのリクエストです。
更新 Webページに50の要素がある場合、それは50のリクエストです。リクエストごとに同じCookieを送信するのはなぜですか。キャッシュされていないか、すでにあることを知っていますか?
回答:
はい、リクエストされたURLがCookieで定義された同じドメインとパス内にある限り(および他のすべての制限(安全、httponly、期限切れなしなど))が保持されていれば、Cookieはすべてのリクエストに対して送信されます。
他の人が言ったように、クッキーのホスト、パスなどの制限が満たされた場合、それは50回送信されます。
しかし、理由も尋ねました。CookieはHTTP機能であり、HTTPはステートレスだからです。HTTPは、サーバーがリクエスト間の状態を保存しなくても機能するように設計されています。
実際、サーバーには、どのユーザーが特定のリクエストを送信しているかを確実に認識する方法がありません。1つのWebプロキシ(つまりIPアドレス)の背後に1,000人のユーザーがいる可能性があります。Cookieがすべてのリクエストに送信されなかった場合、サーバーはどのユーザーがどのリソースをリクエストしているかを知る方法がありません。
最後に、ブラウザは、サーバーがCookieを必要とするかどうかの手がかりを持たず、サーバーがfoo.comへの要求に対するCookieを送信するように指示したことを知っているだけなので、そうします。画像に必要な場合もあれば(たとえば、ユーザーごとに動的に生成される場合もあります)、必要ない場合もありますが、ブラウザは認識できません。
はい。すべてのリクエストは、同じドメインに属するCookieを送信します。HTTPはステートレスであるため、それらはキャッシュされません。つまり、すべてのリクエストは、サーバーがHTTPで何をすべきかを理解するのに十分でなければなりません。特定のユーザーだけがアクセスできる画像があるとします。あなたはそれらの50個のリクエストのそれぞれで認証Cookieを送信する必要があります。そうすることで、サーバーは、それが取得しているリクエストのプールの中で、それが他人やゲストではなく、あなたであることを認識します。
そうは言っても、HTTPS設定、パス、ドメインなど、他の応答で言及されている他の制限がある場合、Cookieは送信されない可能性があります。特に、注意すべき重要な点があります。Cookieはドメイン間で共有されません。これは、言及した画像やスクリプトなどの静的ファイルに対するHTTP呼び出しのサイズを削減するのに役立ちます。
例:に4つのCookieがありwww.stackoverflow.com
ます。にリクエストするとwww.stackoverflow.com/images/logo.png
、これらの4つのCookieがすべて送信されます。
ただし、リクエストする場合stackoverflow.com/images/logo.png
(サブドメインの変更に注意)またはimages.stackoverflow.com/logo.png
、これらの4つのCookieは存在しませんが、これらのドメインに関連するCookieは存在する可能性があります。
たとえば、このStackOverflowブログ投稿で、Cookieと画像のリクエストについて詳しく読むことができます。
3年が経ちました
ブラウザがCookieを送信しない別の理由があります。タグにcrossOrigin
属性を<script>
、値をに追加できます"anonymous"
。これにより、Cookieが宛先サーバーに送信されなくなります。99.9%の時間、JavaScriptは静的ファイルであり、リクエストのCookieに基づいてそのjsコードを生成しません。1KBのCookieがあり、ページに200のリソースがある場合、ユーザーは200KBをアップロードしており、3Gでは時間がかかる可能性があり、結果ページへの影響はありません。訪問HTML属性:crossorigin参考のために。
私はこれが古いスレッドであることを知っています。しかし、末尾のドットを追加すると、ほとんどのブラウザーがドメインのCookieを送信しないことに気づきました。たとえば、http://example.com.
に設定され.example.com
たCookieを受信しません。一方、Apacheはそれらを同じホストとして扱います。これは、含める外部リソースのクロスドメイントラッキングを困難にするのに役立ちますが、パフォーマンス上の理由から使用することもできます。これにより、https
証明書の検証が妨げられることに注意してください。browsershotsと自分のデバイスを使用していくつかのテストを実行しました。ハックは、リクエストにCookieが含まれるSafari(モバイルおよびデスクトップ)を除くほとんどすべてのブラウザで機能します。
短い答えははいです。以下の行はJSドキュメントからのものです
Cookieはかつて一般的なクライアント側のストレージに使用されていました。これがクライアントにデータを保存する唯一の方法であった場合、これは正当でしたが、現在は最新のストレージAPIを使用することが推奨されています。Cookieはリクエストごとに送信されるため、パフォーマンスが低下する可能性があります(特にモバイルデータ接続の場合)。