問題

如何為資原始檔生成ETag HTTP頭?

  最佳答案

etag 是一個任意的字串,伺服器傳送給客戶端,客戶端將在下次請求檔案時傳送回伺服器。

etag應該是基於檔案在伺服器上計算的.有點像checksum,但是您可能不想檢查傳送它的每個檔案.

  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