浏览器协商缓存中的ETag是怎么生成的?
上一篇 浏览器的缓存机制 讲了整个的缓存流程,那么其中的ETag是怎么生成的呢?
其实在不同的Web服务器有不同的算法,今天,我们就以nginx为例,看一下是怎么生成的。
以这个资源文件的请求为例

可以看到Server是 nginx/1.14.0,那我们再去看看nginx的源码是怎么生成ETag的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;
通过源码可以得知,ETag是由Last-Modified和Content-Length的16进制计算得到,那么我们反过来计算一下,是不是能将5e99b190转化成Last-Modified的 Fri, 17 Apr 2020 13:39:28 GMT?

哈哈,果真是一样的!!!
其他Web服务生成ETag的示例demo如下,至于算法要自行研究啦
