etagを作成する最良の方法は何ですか? [閉まっている]

StackOverflow https://stackoverflow.com/questions/162105

  •  03-07-2019
  •  | 
  •  

質問

Webページのetagをプログラムで生成する良い方法は何ですか?このプラクティスは推奨されますか? etagをオフにすることを推奨するサイトもあれば、手動で作成することを推奨するサイトもあれば、デフォルト設定をアクティブのままにすることを推奨するサイトもあります。ここでの最善の方法は何ですか?

役に立ちましたか?

解決

ETagsは、Webサイトジェネレーターの前で何らかのキャッシュメカニズムを使用する場合に役立ちます。ブラウザ自体はそれらを使用せず、「(if)変更以降」をリッスンします;または「年齢」ヘッダー構造体、afaik。

とにかく、その単純な性質により、httpヘッダーにETagを提供しても問題ありません。多くのWebサーバーは、単にファイルの場所とファイルのタイムスタンプを取得し、このデータに対してmd5-hashを行うと聞きました。

一例として、ソフトウェアを使用してシンプルだが効果的なetagを構築しました。すべての「コンテンツユニット」 (つまり、html、jpegs、gifs ...)ソフトウェアの一意のIDとバージョン番号があります(つまり、jpegのIDは「17」とバージョン「2」です。これは1回変更されたことを意味します)。したがって、ETagは単に文字列「id-version」で、ここでは「17-2」です。次の変更では、「17-3」になります。キャッシュ機能が変更を認識し、新しいコンテンツパーツを(一度)完全にロードして、独自のキャッシュに保存します。

しかし、おそらくURLとタイムスタンプ(つまり、ファイルのタイムスタンプ)も使用できます。

他のヒント

コンテンツのハッシュを生成することをお勧めします。 md5($ content)
さらに、ハッシュの衝突を防ぐために、たとえばコンテンツ要素のID(これが適切な場合)。

まあ、ETagsは、キャッシュに大きく依存している場合に意味があります。これらはリソースの状態(URLなど)を示す優れた指標です。

たとえば、 ajax リクエストを使用してユーザーの最新のコメントを取得し、新しいコメントがあるかどうかを知りたいとします。 ETagを新しいコンテンツのアプリケーションに alert に変更することは、それを確認するための安価な方法です。

ETagが同じ場合、キャッシュを保持できますが、そうでない場合は再構築できます。

ETagsは、RESTful APIでも多くの意味を持ちます。

生成については、仕様、あなたが望むほとんど何でもできると思います。タイムスタンプ、ハッシュ、あなた/あなたのアプリケーションにとって意味のあるもの。

YSlowを起動したところ、Etagsについて不平を言っていたので、少し調べました。 Yahooブログ(コメントを参照)による問題また、デフォルトのETags実装は、ファイルiノード番号またはntfsリビジョン番号、またはハッシュの一部として等しくサーバー固有のものを使用することです。これは、高速ですが、基本的に2つの異なるサーバーによって提供される同じファイルが同じetagを持つことを防ぎ、ブラウザーとダウンストリームキャッシュまたは負荷分散の両方を台無しにします。

MD5ハッシュを使用するという以前の提案は良いものですが、それ自体がパフォーマンスの問題にならないようにする必要があります。この提案の実装は読者に任されていますが、このフレームワークはあなたのフレームワークで処理できるようなものであるように思えます。

私にとっては、ファイルのタイムスタンプが十分すぎる単純な環境にいるので、.htaccessファイルで FileETag none を使用してApacheでそれらをオフにしました。これにより、YSlowがシャットダウンされ、ファイルの最終変更日までフォールバックするはずです。

通常、「サイト」 Yahooの使用を妨げるのは、一部のデフォルトWebサーバーがサーバーファームで機能するETAGを自動的に作成しないためです。 (Yahooが主張するのは正確かつ正確です。)

ただし、単一のWebサーバーを使用している場合は、問題ありません。そうでない場合は、Webサーバーがこれをどのように処理し、適切に動作するかを確認する必要があります。

ムファサ、

Yahoo(およびYSlow)は実際に使用を推奨していますが、自動生成されたETagはサーバーごとに異なることに注意してください。

まだ投票できないので、ファイルパスとタイムスタンプ(または、dbコンテンツで表されている場合はテーブル名+プライマリフィールド値+タイムスタンプ)のハッシュの提案に同意するだけです。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top