http etag java,面试官:如果 http 响应头中 ETag 值改变了,是否意味着文件内容一定已经更改...

不一定,由服务器中 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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值