本篇文章由个人 一日一题 中的四个
Issue
组合而成前端
不必定,由服务器中 ETag
的生成算法决定。详见 #112node
好比 nginx
中的 etag
由 last_modified
与 content_length
组成,而 last_modified
又由 mtime
组成linux
当编辑文件却未更改文件内容时,mtime
也会改变,此时 etag
改变,可是文件内容没有更改。nginx
通常会选文件的 mtime
,表示文件内容的修改时间git
nginx
也是这样处理的,源码见: ngx_http_static_module.c程序员
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
github
在 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
c#
我是山月,一个喜欢跑步与登山的程序员,我会按期分享全栈文章在我的公众号中。若是你对全栈面试,前端工程化,graphql,devops,我的服务器运维以及微服务感兴趣的话,能够关注我