Last-Modified
Last-Modified和If-Modified-Since是一对的。
当浏览器第一次请求一个url时,服务器端的返回状态码为200,同时HTTP响应头会有一个Last-Modified标记着文件在服务器端最后被修改的时间。
浏览器第二次请求上次请求过的url时,浏览器会在HTTP请求头添加一个If-Modified-Since的标记,用来询问服务器该时间之后文件是否被修改过。
但是Last-Modified是http1.0的产物,有两个缺点:
- 只能精确到秒级别
- 内容完全没改变的资源文件,无法识别出来(只要修改时间变了,就算变动)。
所有就有了ETag。
ETag
ETag解决了Last-Modified的缺点,http1.1的字段,优先级高于Last-Modified。
ETag有两种类型:
-
强ETag
强ETag值,不论实体发生多么细微的变化都会改变其值。
强ETag表示形式:“22FAA065-2664-4197-9C5E-C92EA03D0A16”。 -
弱ETag
弱 ETag 值只用于提示资源是否相同。只有资源发生了根本改变产 生差异时才会改变 ETag 。这时,会在字段值最开始处附加 W/。
弱ETag表现形式:W/“22FAA065-2664-4197-9C5E-C92EA03D0A16”。
ETag和If-None-Match是一对:
当浏览器第一次请求一个url时,服务器端的返回状态码为200,同时HTTP响应头会有一个Etag,存放着服务器端生成的一个序列值。
浏览器第二次请求上次请求过的url时,浏览器会在HTTP请求头添加一个If-None-Match的标记,用来询问服务器该文件有没有被修改。