質問

リソース ファイルの ETag HTTP ヘッダーを生成するにはどうすればよいですか?

役に立ちましたか?

解決

etag は、サーバーがクライアントに送信する任意の文字列で、次回ファイルが要求されたときにクライアントがサーバーに送り返します。

etag は、ファイルに基づいてサーバー上で計算可能である必要があります。チェックサムのようなものですが、送信するすべてのファイルにチェックサムを付けたくない場合もあります。

 server                client

        <------------- request file foo

 file foo etag: "xyz"  -------->

        <------------- request file foo
                       etag: "xyz" (what the server just sent)

 (the etag is the same, so the server can send a 304)

「ファイルの inode 番号/日付スタンプ/ファイル サイズ」という形式の文字列を作成しました。したがって、ファイルがクライアントに提供された後にサーバー上で変更された場合、クライアントが再リクエストした場合に、新しく再生成された etag は一致しません。

char *mketag(char *s, struct stat *sb)
{
    sprintf(s, "%d/%d/%d", sb->st_ino, sb->st_mtime, sb->st_size);
    return s;
}

他のヒント

リソースの表現が変わるたびにそれが変わる限り、それをどのように生成するかは完全にあなた次第です。

さらに次のような方法で生成するようにしてください。

  1. 条件付き GET ごとに再計算する必要がなく、
  2. リソースの内容が変更されない場合は変更されません

コンテンツのハッシュを使用すると、計算されたハッシュをファイルと一緒に保存しないと、#1 で失敗する可能性があります。

ファイルシステムを再配置したり、複数のサーバーからコンテンツを提供したりする場合、inode 番号を使用すると #2 で失敗する可能性があります。

機能するメカニズムの 1 つは、SHA-1 ハッシュやバージョン文字列など、完全にコンテンツに依存するものを使用し、リソースのコンテンツが変更されるたびに一度計算して保存することです。

から http://developer.yahoo.com/performance/rules.html#etags:

デフォルトでは、Apache と IIS の両方が ETag にデータを埋め込むため、複数のサーバーを備えた Web サイトで有効性テストが成功する確率が大幅に減少します。

...

ETag が提供する柔軟な検証モデルを利用していない場合は、ETag を完全に削除することをお勧めします。

bash でデフォルトの Apache etag を生成する方法

for file in *; do printf "%x-%x-%x\t$file\n" `stat -c%i $file` `stat -c%s $file` $((`stat -c%Y $file`*1000000)) ; done

etag とまったく同じものを探していたときでも (サーバー上で変更されている場合にのみ、ブラウザーはファイルを要求します)、うまく機能せず、GET トリック (get 引数としてタイムスタンプを js ファイルに追加する) を使用することになりました。 )。

私は Adler-32 を HTML リンク短縮ツールとして使用しています。これが良いアイデアかどうかはわかりませんが、今のところ重複には気づいていません。etag ジェネレーターとして機能する可能性があります。また、sha のような暗号化スキームを使用してハッシュを試みるよりも高速なはずですが、これは検証されていません。私が使用するコードは次のとおりです。

 shortlink = str(hex(zlib.adler32(link)+(2**32-1)/2))[2:-1]

それらを使用せず、代わりに最終変更ヘッダーを使用することをお勧めします。

Askapache にこれに関する役立つ記事があります。(彼らは、見た目でわかることはほとんどすべてやっているのですから!)

http://www.askapache.com/htaccess/apache-speed-etags.html

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