美文网首页
ETag 和 Last-Modified, 协商缓存。 文件h

ETag 和 Last-Modified, 协商缓存。 文件h

作者: 樊海鹏 | 来源:发表于2018-10-25 10:54 被阅读0次

    特性

    • ETag和If-None-Match是一对;Last-Modified和If-Modified-Since是一对
    • 它们都属于协商缓存,对内容的有效性进行验证,具体看这里
    • 验证的过程是类似(以Etag为例):首次请求,如果response header含有Etag值,则下一次请求,request header 就会带上If-None-Match,它的值为上次接收到服务器发来的Etag的值。服务器接收到这个值和自身现在的Etag比较,来判断内容是否有变化。如果没变化则返回请求头304,有变化则重新从服务器获取内容,成功的话返回200和内容。这个过程是浏览器自动完成的。
    • 生成值的方法不同: Etag的值通常为文件内容的哈希值;而Last-Modified为最后修改的时间。

    ETag特点

    1. Last-Modified只能精确到秒,秒之内的内容更新Etag才能检测
    2. 文件有时会定时重新生成相同内容,Last-Modified不能很好辨别
    3. etag每次服务端生成都需要进行读写操作,而last-modified只需要读取操作,etag的消耗是更大的

    Etag/If-None-Match例子

    1. 第一次请求
    image.png

    2.第二次请求


    image.png

    通过实验可以清晰看到这个请求头是怎么起作用的

    Last-Modified/If-Modified-Since

    与上面类似,具体请对照实验

    304

    如上面所示,304状态码出现在协商缓存,进行缓存内容有效性验证的时候。如果缓存内容被服务端认定没有变化,则只返回response header,并把状态码设置为304,并不返回response body,浏览器再收到304的时候,从本地的缓存中读取内容。如果内容有变,则返回新的header和body。可见,304在缓存中的作用最后体现在少返回了一次内容上。

    参考资料:

    http://www.telerik.com/blogs/understanding-http-304-responses
    https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/ETag

    作者:donnylin
    链接:https://www.jianshu.com/p/b5c805f4e8d1
    來源:简书
    简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

    相关文章

      网友评论

          本文标题:ETag 和 Last-Modified, 协商缓存。 文件h

          本文链接:https://www.haomeiwen.com/subject/tobftqtx.html