問題

リソースファイルの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)
 

"file inode number/datestamp/file size"という形式の文字列を作成しました。したがって、ファイルがクライアントに送信された後にサーバー上で変更された場合、新しく再生成されたetagは、クライアントがリクエストすると一致しません。

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

  同じタグがついた質問を見る

language-agnostichttpwebserverheaderetag