[解決済み] HTTPヘッダーの "Vary.Accept "の機能は何ですか?HTTPヘッダ "Accept "の機能を教えてください。
質問
PHP を使用して動的な Web ページを生成しています。以下のチュートリアル(下記リンク参照)にあるように、$_SERVER['HTTP_ACCEPT']が許可する場合、XHTMLドキュメントのMIMEタイプは"application/xhtml+xml"にすべきとされています。同じページを2つの異なるMIME ("application/xhtml+xml" と "text/html") で提供できるため、HTTPヘッダーの "Vary" を "Accept" に設定する必要があります。これは、プロキシでのキャッシュを助けることになります。
リンク http://keystonewebsites.com/articles/mime_type.php
さて、その意味するところがよくわからないのですが。 header('Vary: Accept')。 Vary.Accept'が何をするのかよくわかりません。Accept'が正確に何をするのかよくわからないのですが...。
私が見つけた唯一の説明は
Content-Type ヘッダの後に、Vary ヘッダが送信され、(私が正しく理解していれば) 中間キャッシュに伝えるためです。 プロキシサーバのような中間キャッシュに、ドキュメントのコンテンツタイプが によってドキュメントのタイプが異なることを ドキュメントを要求したクライアントの能力に応じて によって異なることを伝えるために送られます。 http://www.456bereastreet.com/archive/200408/content_negotiation/
どなたか、このヘッダについて "real"な説明をお願いします( をその値で ). 私は次のようなものを理解していると思います。 Vary: Accept-Encoding のように、プロキシでのキャッシュが提供されるページのエンコーディングに基づく可能性がありますが、私は理解していません。 Vary: Accept
どのように解決するには?
-
その
cache-control
ヘッダは、HTTP サーバがキャッシュプロキシにレスポンスの鮮度を伝えるための主要な仕組みです。 (すなわち、応答をキャッシュに保存する期間) を指定します。 -
状況によっては
cache-control
ディレクティブでは不十分な場合があります。 HTTP ワーキンググループの議論がアーカイブされています。 にあります。 は、言語によってのみ変化するページを記述しています。 これは ではなく の正しい使用例ではありませんが、この文脈は私たちの議論にとって重要です。 (私は Vary ヘッダーがこの場合の問題を解決すると信じていますが、より良い方法があります)。そのページより。
Vary
は、厳密に言うと、サーバが行うことをプロキシが再現することが絶望的であったり、過度に複雑であるような場合のためにあります。
- RFC2616 "ヘッダーフィールドの定義" は、サーバーから見たヘッダーの使用法を記述しています。 RFC2616 "Caching Negotiated Responses" はキャッシュプロクシの観点からヘッダの使い方を説明しています。 これは、リクエストの一意性を決定する HTTP リクエストヘッダのセットを指定することを意図しています。
作り込まれた例です。
あなたのHTTPサーバーには、大きなランディングページがあります。 同じ URL で、ユーザーが以前にアクセスしたことがあるかどうかによって、わずかに異なる 2 つのページがあります。 リクエストとユーザーの訪問回数は Cookie に基づいて区別されます。 しかし -- サーバーのランディングページは非常に大きいので、可能であれば中間プロキシにレスポンスをキャッシュさせたいと考えています。
URL、Last-Modified、Cache-Control ヘッダは、キャッシュプロキシにこの洞察を与えるには不十分ですが、もしあなたが
Vary: Cookie
を追加すると、キャッシュエンジンはそのキャッシュの判断にクッキーヘッダを追加します。
最後に、小規模なトラフィックで動的な Web サイトの場合、私は常に、シンプルな
Cache-Control: no-cache, no-store
と
Pragma: no-cache
で十分です。
編集 -- より正確にあなたの質問に答えるために: HTTP リクエストヘッダ 'Accept' は、クライアントが処理できる Content-Type を定義しています。 もし同じ URL に同じコンテンツのコピーが 2 つあり、Content-Type だけが異なっている場合、Vary: Accept
を使用することが適切でしょう。
12年9月11日更新。
このコメントが最初に投稿されて以来、コメントに登場した2つのリンクを含んでいます。 これらは両方とも、Vary.Accept の実世界の例 (および問題) のための優れたリソースです。この回答を読んでいるのであれば、これらのリンクも読む必要があります。
最初の記事は、傑出したEricLawによる、Internet ExplorerのVaryヘッダに関する動作と、それが開発者にもたらすいくつかの課題に関するものである。 Vary ヘッダは IE でのキャッシュを防止する . 要するに、IE (IE9 以前) では、リクエスト キャッシュに HTTP リクエスト ヘッダーが含まれないため、Vary ヘッダーを使用するコンテンツはキャッシュされません。 EricLaw (現実世界では Eric Lawrence) は IE チームのプログラム マネージャーです。
2 つ目は Eran Medan によるもので、Chrome における Vary 関連の予期せぬ動作に関する継続的な議論です。 Backing が Vary ヘッダーを正しく処理しない . これは IEの動作に関連するものですが、Chrome の開発者は異なるアプローチを取りました (意図的な選択ではなかったようです)。
関連
-
[解決済み] Preflightとredirectを使用したCORSリクエスト: 不許可になりました。回避策は?
-
[解決済み] ブラウザによって異なるURLの最大長とは?
-
[解決済み] URI、URL、URNの違いは何ですか?
-
[解決済み] POSTとPUT HTTP REQUESTの違いは何ですか?
-
[解決済み] PythonでHTTP GETを行う最短の方法は何ですか?
-
[解決済み] HTTPヘッダーの最大値?
-
[解決済み】HTTPのPOSTとPUTの違いは何ですか?
-
[解決済み】無効なデータに対するRESTレスポンスコード
-
[解決済み】エンティティボディを持たないHTTP POSTを実行することはバッドプラクティスとみなされますか?
-
[解決済み】HTTP1.1とHTTP2.0の違いは何ですか?[クローズド]
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] HTTPポストで文字+が%2Bに変換される
-
[解決済み] HTTPヘッダーの大文字と小文字は区別されますか?
-
[解決済み] X-Forwarded-Hostヘッダーの実際の使用方法?
-
[解決済み] HTTPヘッダーの大文字と小文字は区別されますか?
-
[解決済み] なぜCSRF防止トークンをクッキーに入れるのが一般的なのですか?
-
[解決済み】BASIC認証でWebサイトからユーザーをログアウトさせる方法は?
-
[解決済み】無効なデータに対するRESTレスポンスコード
-
[解決済み】どのHTTPメソッドがどのCRUDメソッドと一致するか?
-
[解決済み] サーバーサイドでCookieを削除する正しい方法
-
[解決済み] HTTPヘッダーの設定