问题

如何为资源文件生成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