HTTP 304(Not Modified)和200(From Cache)的区别

大家都知道200是正常,304是没有变化、没有修改。
但200是不是真的就“正常”,304背后又都做了什么?他是怎么判断没修改的?

200(From cache)是直接点击链接访问,输入网址按回车访问触发(这两种情况都不会有Etag);
304(Not Modified)是刷新页面时触发,或是设置了长缓存、或当Etag没有移除时触发。

先说说304
当你第一次请求一个资源的时候,server会同时生成并返回一个字符串在响应头里,叫Etag。
浏览器接到资源后,缓存资源的同时也会把这个Etag保存下来,成为If-None_Match 。Etag可以看作是一个资源的唯一标识,当你第二次请求这个资源的时候,请求头里会带着这个Etag,server会拿server该资源现在的Etag跟请求头中的If-None_Match做对比,然后看看If-Modified-Since过没过期,如果一样,直接告诉他:你就用本地的吧,我没变,就不给你返回了。所以返回了304,304就是这样。

再说说200 From Cache
这个虽然是200,但他根本就没有跟server做交互,直接拉的本地缓存。
上边已经说了From Cache的触发条件,但如果想一直持续From Cache不想304怎么办?
可以在Server端配置移除Etag,具体请听下回分解.


发表评论

电子邮件地址不会被公开。 必填项已用*标注