高级前端
http
【Q112】如果 http 响应头中 ETag 值改变了,是否意味着文件内容一定已经更改

如果 http 响应头中 ETag 值改变了,是否意味着文件内容一定已经更改

Issue 欢迎在 Gtihub Issue 中回答此问题: Issue 113 (opens in a new tab)

Author 回答者: shfshanyue (opens in a new tab)

不一定,由服务器中 ETag 的生成算法决定。详见 #112 (opens in a new tab)

比如 nginx 中的 etaglast_modifiedcontent_length 组成,而 last_modified 又由 mtime 组成

当编辑文件却未更改文件内容时,或者 touch filemtime 也会改变,此时 etag 改变,但是文件内容没有更改。

Author 回答者: collins999 (opens in a new tab)

比如 nginx 中的 etag 由 last_modified 与 content_length 组成,而 last_modified 又由 mtime 组成。

那Etag是怎么解决last_modified,当编辑文件却未更改文件时间的问题?

Author 回答者: shfshanyue (opens in a new tab)

比如 nginx 中的 etag 由 last_modified 与 content_length 组成,而 last_modified 又由 mtime 组成。

那Etag是怎么解决last_modified,当编辑文件却未更改文件时间的问题?

  1. 此时文件大小有可能发生更改,ETag 会改变
  2. 此时文件大小没有发生更改,ETag 不会改变。但这需要极其苛刻的条件:1s 内更改文件,并且保持文件大小不变。这种情况出现概率很低,因此忽略了