你知道 http 响应头中的 ETag 是如何生成的吗
关于 etag 的生成需要满足几个条件 当文件不会更改时, etag 值保持不变。所以不能单纯使用 inode 便于计算,不会特别耗 CPU。这样子 hash 不是特别合适 便于横向扩展,多个 node 上生成的 etag 值一致。这样子 inode 就排除了 关于服务器中 etag 如何生成可以参考 HTTP: Generating ETag Header 那么在 nginx 中的 etag 是如何生成的? nginx 中 ETag 的生成 我在网上找到一些资料与源代码了解到了 etag 的计算方法。由 python 伪代码表示计算方法如下 etag = '{:x}-{:x}'.format(header.last_modified, header.content_lenth) 源码: ngx_http_core_modules.c etag->value.len = ngx_sprintf(etag->value.data, "\"%xT-%xO\"", r->headers_out.last_modified_time, r->headers_out.content_length_n) - etag->value.data; 总结: nginx 中 etag 由响应头的 Last-Modified 与 Content-Length 表示为十六进制组合而成。