If-Modified-Since & If-None-Match
If-Modified-Since,和 Last-Modified 一样都是用于记录页面最后修改时间的 HTTP 头信息,只是 Last-Modified 是由服务器往客户端发送的 HTTP 头,而 If-Modified-Since 则是由客户端往服务器发送的头,可 以看到,再次请求本地存在的 cache 页面时,客户端会通过 If-Modified-Since 头将先前服务器端发过来的 Last-Modified 最后修改时间戳发送回去,这是为了让服务器端进行验证,通过这个时间戳判断客户端的页面是否是最新的,如果不是最新的,则返回新的内容,如果是最新的,则 返回 304 告诉客户端其本地 cache 的页面是最新的,于是客户端就可以直接从本地加载页面了,这样在网络上传输的数据就会大大减少,同时也减轻了服务器的负担。
If-None-Match,它和ETags(HTTP协议规格说明定义ETag为“被请求变量的实体值”,或者是一个可以与Web资源关联的记号)常用来判断当前请求资源是否改变。类似于Last-Modified和HTTP-IF-MODIFIED-SINCE。但是有所不同的是Last-Modified和HTTP-IF-MODIFIED-SINCE只判断资源的最后修改时间,而ETags和If-None-Match可以是资源任何的任何属性,不如资源的MD5等。
ETags和If-None-Match的工作原理是在HTTP Response中添加ETags信息。当客户端再次请求该资源时,将在HTTP Request中加入If-None-Match信息(ETags的值)。如果服务器验证资源的ETags没有改变(该资源没有改变),将返回一个304状态;否则,服务器将返回200状态,并返回该资源和新的ETags。
ETag如何帮助提升性能?
聪明的服务器开发者会把ETags和GET请求的“If-None-Match”头一起使用,这样可利用客户端(例如浏览器)的缓存。因为服务器首先产生ETag,服务器可在稍后使用它来判断页面是否已经被修改。本质上,客户端通过将该记号传回服务器要求服务器验证其(客户端)缓存。
其过程如下:
1.客户端请求一个页面(A)。
2.服务器返回页面A,并在给A加上一个ETag。
3.客户端展现该页面,并将页面连同ETag一起缓存。
4.客户再次请求页面A,并将上次请求时服务器返回的ETag一起传递给服务器。
5.服务器检查该ETag,并判断出该页面自上次客户端请求之后还未被修改,直接返回响应304(未修改——Not Modified)和一个空的响应体。
- 浏览: 156684 次
- 性别:
- 来自: 北京
最新评论
-
ysc123shift:
感谢博主,提供灵感并行到了我遇到问题的解决方法:注释onSto ...
Activity中onStop和onDestroy方法延迟调用BUG解决 -
砺雪凝霜:
可以加我QQ:1029457926 一起交流,一起进步,一起 ...
Android内存优化实践 -
zhu_jinlong:
非常好的文章,做到这些并牢记处理原则,可以远离memory l ...
Android内存优化实践 -
zhu_jinlong:
Volley持有context引用导致的memory leak ...
那些年我使用Volley遇到的坑 -
zhu_jinlong:
特地登录点赞!
如何做好程序员的自己
相关推荐
本文将深入探讨两个关键的缓存机制:Etag与If-None-Match以及Last-Modified与If-Modified-Since。 1. Etag与If-None-Match: Etag(Entity Tag)是一种用于标识资源版本的机制。服务器在响应头中设置Etag,它通常是...
当客户端再次请求资源时,它会发送一个 `If-None-Match` 头,包含上次接收到的资源的ETag值。服务器会比较这个值与当前资源的ETag,如果两者匹配,同样会返回304 "Not Modified"响应。 相比于 `Last-Modified`,...
协商缓存的字段有 Last-Modified / If-Modified-Since 和 Etag / If-None-Match,其中 Etag / If-None-Match 的优先级比 Last-Modified / If-Modified-Since 高。 Last-Modified 字段,它的值是该资源文件在服务器...
Etag http If-None-Match If-Modified-Since Last-Modified 使用Demo 已经可以直接使用
修改last-modified的HTTP规范,实现了last-modified , if-modified-since , etag , if-none-match 。概要Modified是根据构建的,并通过缓存支持对其进行修饰,因此,如果您熟悉请求,则几乎可以使用修改了。 var...
当浏览器进行第二次请求时,它会通过`If-None-Match`头部发送接收到的ETag值,询问服务器资源是否已更改。如果资源未变,服务器同样会返回304 Not Modified状态码。 ETag的优势在于它可以更精确地验证资源是否改变...
26 If-None-Match 27 27 If-Range 28 28 If-Unmodified-Since 28 29 Last-Modified 29 30 Location 29 31 Max-Forwards 29 32 Pragma 30 33 Proxy-Authenticate 30 34 Proxy-Authorization 31 35 Range 31 1字节范围...
强缓存通过这些头部直接决定是否使用缓存,而协商缓存则通过`Last-Modified`/`If-Modified-Since`或`ETag`/`If-None-Match`与服务器通信来验证资源是否更新。Service Worker提供了更细粒度的缓存控制,支持离线应用...
浏览器缓存机制、Expires策略(http1.0)和Cache-control策略(http1.1)、Last-Modified/If-Modified-Since、ETag/If-None-Match
协商缓存通常涉及Last-Modified/If-Modified-Since和Etag/If-None-Match两个字段。Last-Modified是服务器返回资源的最后修改时间,If-Modified-Since是客户端再次请求时携带的Last-Modified值,用来告诉服务器资源的...
* Request Header Fields:Accept、Accept-Charset、Accept-Encoding、Accept-Language、Authorization、Expect、From、Host、If-Match、If-Modified-Since、If-None-Match、If-Range、If-Unmodified-Since、Max-...
if (ifModifiedSince && ifModifiedSince == stats.ctime.toGMTString()) { res.statusCode = 304; res.end(); } else if (etag) { // 添加ETag支持 // ... } else { sendFile(req, res, filePath, stats); ...
3. **`Last-Modified`与`If-Modified-Since`**: 类似于`ETag`,`Last-Modified`头表示资源的最后修改时间。如果客户端在下次请求时提供`If-Modified-Since`头,服务器会比较这个时间,如果资源未修改,则返回`304 ...
具体来说,它处理 If-Match、If-None-Match、If-Modified-Since 和 If-Unmodified-Since 标头,同时为客户端提供 ETag 和 Last-Modified 标头。 条件请求可以通过节省不经常更改的响应的带宽来提高服务器的效率,...
3. ETag:用于标识资源的特定版本,供If-Match、If-None-Match等使用。示例:ETag: "737060cd8c284d8af7ad3082f209582d" 4. Location:重定向响应时,指示新的URL。示例:Location: ...
F5触发的HTTP请求的请求头中通常包含了If-Modified-Since 或 If-None-Match字段,或者两者兼有。CTRL+F5触发的HTTP请求的请求头中没有上面的那两个头 所以说你非常需要此工具!!!!!
18. If-None-Match: 如果内容未改变返回 304 码,参数为服务器先前发送的 Etag,与服务器回应的 Etag 比较判断是否改变,例如 If-None-Match: “737060cd8c284d8af7ad3082f209582d”。 19. If-Range: 如果实体未...
cs(Host) cs(If-Match) cs(If-Modified-Since) cs(If-None-Match) cs(If-Range) cs(If-Unmodified-Since) cs(Max-Forwards) cs(Pragma) cs(Accept) cs(Accept-Charset) cs(Accept-Encoding) cs(Accept-Language) cs...
此外,`ETag`(实体标签)也是验证缓存有效性的一个方法,它为每个资源生成一个唯一的标识符,当资源更新时,`ETag`也会变化,服务器通过比较`If-None-Match`头中的`ETag`值来判断是否需要提供新的内容。 在实际应用...
- F5通常会包含If-Modified-Since或If-None-Match字段,服务器响应304表示无需更新缓存。 - CTRL+F5则包含Pragma:no-cache或Cache-Control:no-cache字段,强制服务器返回最新的文件,从而跳过缓存。 进行刷新操作时...