http缓存机制总结和文章引荐

引荐浏览:
伯乐在线——HTTP 缓存机制一二三
IMWeb前端博客——HTTP缓存掌握小结
IT笔录——http音讯头

http缓存机制

症结头部字段

  • cache-control、 Pragma
  • if-Match、if-None-Match
  • if-Modified-Since、if-Unmodified-Since
  • ETag
  • Expires、Last-Modified

Pragma

http1.0可用,如今为了向下兼容,也设置该头部,只需一个值:no-cache禁用缓存

Expires

设置缓存时刻(该时刻相关于服务器),接收一个GMT(格林尼治时刻),用来通知浏览器逾期时刻,假如还没有过这个时刻则不发送要求。

Expires: Sun Jul 15 2018 19:13:07 GMT

cache-control

也可用来设置缓存时刻,http1.1与http1.0可用,三者优先级:

Pragma > Cache-Control > Expires

可设置多个值,比方经常运用的:no-cache, max-age, public, private

Last-Modified

接收一个格林尼治时刻,申明资本的近来一次的修正时刻,该字段的作用是当某个资本保存的缓存时刻逾期了,但服务器并没有更新过这个资本,那末能够通知客户端此资本没有更新,能够猎取缓存中的内容(返回304,不返回实体内容)

if-Modified-Since

Last-Modified的值会在下一次的要求中经由过程if-Modified-Since传递给服务器,假如它的值和此时服务器的Last-Modified值一致,申明没有修正,服务器返回304。假如不一致则看成一般要求处置惩罚,返回资本和200状况码。

ETag

服务端资本有能够被更新了,然则现实内容并没有转变。然则如许依旧会引起Last-Modified的更新,服务器给客户端返回没有任何转变的内容。为了处理这个题目,引入了ETag。用于http1.1。
服务器为资本天生一个唯一的字符串,如经由过程md5编码。只需稳定,天生的字符串就稳定。在客户端要求资本的时刻,将该ETag一同返回给客户端,客户端保存该ETag,下次要求的时刻带上。然后比较ETag,雷同则示意内容雷同,返回304;差别,返回资本和200状况码。

If-None-Match

ETag的值会经由过程if-None-Match头部传递给服务器,然后服务器比较ETag的值,雷同则示意内容雷同,返回304;差别,返回资本和200状况码。

别的的 if-None-Match,if-Unmodified-Since

他们不是用来完成缓存战略的,而是用来优化并发掌握,他们的作用是,使得当前要求成为条件式要求:只需当资本在指定的时刻以后没有举行过修正的状况下,服务器才会返回要求的资本,或是接收 POST 或其他 non-safe 要领的要求。例如在某些场景:假如在原始副本猎取以后,服务器上所存储的文档已被修正,那末对其作出的编辑会被谢绝提交。

总结

  1. Expires / Cache-Control用来设置缓存时刻,即资本有用时刻。状况码 200(from cache),可防止要求发送到服务器。
  2. Last-Modified / ETag用来推断资本是不是被修正了。状况码 304(not change),可防止传输雷同的资本内容,形成带宽和时刻的糟蹋。

运用准绳

  • 须要兼容HTTP1.0的时刻须要运用Expires,不然能够斟酌直接运用Cache-Control
  • 须要处置惩罚一秒内屡次修正的状况,或许其他Last-Modified处置惩罚不了的状况,才运用ETag,不然运用Last– Modified。
  • 关于一切可缓存资本,须要指定一个Expires或Cache-Control,同时指定Last-Modified或许Etag。
  • 能够经由过程标识文件版本名、加长缓存时刻的体式格局来削减304相应。
    原文作者:holyZhengs
    原文地址: https://segmentfault.com/a/1190000015641875
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞