不一定,由服务器中 ETag 的生成算法决定。详见 #112
比如 nginx 中的 etag 由 last_modified 与 content_length 组成,而 last_modified 又由 mtime 组成
当编辑文件却未更改文件内容时,mtime 也会改变,此时 etag 改变,但是文件内容没有更改。
http 服务中静态文件的 Last-Modified 根据什么生成
一般会选文件的 mtime,表示文件内容的修改时间
r->headers_out.status = NGX_HTTP_OK;
r->headers_out.content_length_n = of.size;
r->headers_out.last_modified_time = of.mtime;
那为什么使用 mtime 而非 ctime
文件系统中 mtime 和 ctime 指什么,都有什么不同
在 linux 中,
mtime:modified time 指文件内容改变的时间戳
ctime:change time 指文件属性改变的时间戳,属性包括 mtime。而在 windows 上,它表示的是 creation time
所以 ctime 会比 mtime 要大一些,使用 stat 查看文件属性如下
$ stat hello.txt
File: ‘hello.txt’
Size: 30 Blocks: 8 IO Block: 4096 regular file
Device: fd01h/64769d Inode: 917526 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2019-12-10 16:15:55.253325208 +0800
Modify: 2019-12-10 16:15:52.740653330 +0800
Change: 2019-12-10 16:15:52.742653069 +0800
Birth: -
而 http 服务选择 Last_Modified 时一般会选择 mtime