1. ホーム
  2. http

[解決済み] HTTPヘッダーの "Vary.Accept "の機能は何ですか?HTTPヘッダ "Accept "の機能を教えてください。

2023-02-18 05:40:26

質問

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 は、厳密に言うと、サーバが行うことをプロキシが再現することが絶望的であったり、過度に複雑であるような場合のためにあります。

作り込まれた例です。

あなたのHTTPサーバーには、大きなランディングページがあります。 同じ URL で、ユーザーが以前にアクセスしたことがあるかどうかによって、わずかに異なる 2 つのページがあります。 リクエストとユーザーの訪問回数は Cookie に基づいて区別されます。 しかし -- サーバーのランディングページは非常に大きいので、可能であれば中間プロキシにレスポンスをキャッシュさせたいと考えています。

URL、Last-Modified、Cache-Control ヘッダは、キャッシュプロキシにこの洞察を与えるには不十分ですが、もしあなたが Vary: Cookie を追加すると、キャッシュエンジンはそのキャッシュの判断にクッキーヘッダを追加します。

最後に、小規模なトラフィックで動的な Web サイトの場合、私は常に、シンプルな Cache-Control: no-cache, no-storePragma: 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 の開発者は異なるアプローチを取りました (意図的な選択ではなかったようです)。