HTTP头信息控制缓存是通过Expires(强缓存)、Cache-control(强缓存)、Last-Modified/If-Modified-Since(协商缓存)、Etag/If-None-Match(协商缓存)实现
1)Expires是http1.0提出的一个表示资源过期时间的header,它描述的是一个绝对时间,由服务器返回,用GMT格式的字符串表示,如:Expires:Thu, 31 Dec 2016 23:55:55 GMT,
读取缓存数据条件:缓存过期时间(服务器的)< 当前时间(客户端的
缺点:Expires是http1.0强缓存管理header,由于它是服务器返回的一个绝对时间,这样存在一个问题,如果客户端的时间与服务器的时间相差很大(比如时钟不同步,或者跨时区),那么误差就很大,所以在HTTP 1.1版开始,使用 Cache-Control: max-age=秒 替代。
2)Cache-Control描述的是一个相对时间,在进行缓存命中的时候,都是利用客户端时间进行判断,所以相比较Expires,Cache-Control的缓存管理更有效,安全一些。
读取缓存数据条件:上次缓存时间(客户端的)+max-age < 当前时间(客户端的)
Cache-Control值可以是public、private、no-cache、no- store、no-transform、must-revalidate、proxy-revalidate、max-age
各个消息中的指令含义如下:
Public指示响应可被任何缓存区缓存。
Private指示对于单个用户的整个或部分响应消息,不能被共享缓存处理。这允许服务器仅仅描述当前用户的部分响应消息,此响应消息对于其他用户的请求无效。
no-cache指示请求或响应消息不能缓存,该选项并不是说可以设置”不缓存“,而是需要和服务器确认
no-store在请求消息中发送将使得请求和响应消息都不使用缓存,完全不存下來。
max-age指示客户机可以接收生存期不大于指定时间(以秒为单位)的响应。上次缓存时间(客户端的)+max-age(64200s)<客户端当前时间
min-fresh指示客户机可以接收响应时间小于当前时间加上指定时间的响应。
max-stale指示客户机可以接收超出超时期间的响应消息。如果指定max-stale消息的值,那么客户机可以接收超出超时期指定值之内的响应消息。
注意:这两个header可以只启用一个,也可以同时启用,当response header中,Expires和Cache-Control同时存在时,Cache-Control优先级高于Expires
3)Last-Modified/If-Modified-Since:Last-Modified/If-Modified-Since要配合Cache-Control使用。
Last-Modified:标示这个响应资源的最后修改时间。web服务器在响应请求时,告诉浏览器资源的最后修改时间。
If-Modified-Since:当资源过期时(强缓存失效),发现资源具有Last-Modified声明,则再次向web服务器请求时带上头 If-Modified-Since,表示请求时间。web服务器收到请求后发现有头If-Modified-Since 则与被请求资源的最后修改时间进行比对。若最后修改时间较新,说明资源又被改动过,则响应整片资源内容(写在响应消息包体内),HTTP 200;若最后修改时间较旧,说明资源无新修改,则响应HTTP 304 (无需包体,节省浏览),告知浏览器继续使用所保存的cache。
缺点:
Last-Modified标注的最后修改只能精确到秒级,如果某些文件在1秒钟以内,被修改多次的话,它将不能准确标注文件的修改时间(无法及时更新文件)
如果某些文件会被定期生成,当有时内容并没有任何变化,但Last-Modified却改变了,导致文件没法使用缓存,有可能存在服务器没有准确获取文件修改时间,或者与代理服务器时间不一致等情形(无法使用缓存)。
HTTP1.1中Etag解决了上述问题。
4)Etag/If-None-Match:Etag/If-None-Match也要配合Cache-Control使用。
Etag:web服务器响应请求时,告诉浏览器当前资源在服务器的唯一标识(生成规则由服务器决定)。Apache中,ETag的值,默认是对文件的索引节(INode),大小(Size)和最后修改时间(MTime)进行Hash后得到的。
If-None-Match:当资源过期时(使用Cache-Control标识的max-age),发现资源具有Etage声明,则再次向web服务器请求时带上头If-None-Match (Etag的值)。web服务器收到请求后发现有头If-None-Match 则与被请求资源的相应校验串进行比对,决定返回200或304。
Etag是服务器自动生成或者由开发者生成的对应资源在服务器端的唯一标识符,能够更加准确的控制缓存。Last-Modified与ETag一起使用时,服务器会优先验证ETag。
浏览器第一次请求
浏览器再次请求
相关推荐
一种常见的方法是通过HTTP头信息控制缓存,例如设置`Cache-Control`、`Expires`和`ETag`等字段。例如,我们可以在JSP页面中添加以下Java代码片段来设置缓存策略: ```java response.setHeader("Cache-Control", ...
HTTP缓存主要遵循HTTP协议中的缓存控制机制,如ETag、Last-Modified等头信息。下面将详细讨论Android中如何实现HTTP缓存。 1. **Android HTTP缓存的基本概念** - **HTTP缓存策略**:主要有两种,一是强缓存(Cache...
设置HTTP头信息控制缓存: ```html <meta http-equiv="Cache-Control" content="max-age=7200" /> <meta http-equiv="Expires" content="Mon, 20 Aug 2010 23:00:00 GMT" /> ``` 总结,Redis作为一个强大的...
可以使用ETag、Last-Modified等HTTP头部信息控制缓存,或者设置合理的Cache-Control、Expires头。 三、启用压缩 服务器端进行文件压缩(如gzip压缩),浏览器端进行文件解压,可以减少传输数据量,从而提升加载速度...
服务端可以通过设置HTTP响应头来控制缓存行为。以下是一些常见的HTTP响应头设置示例: ```jsp response.setHeader("Pragma", "No-cache"); response.setHeader("Cache-Control", "no-cache"); response....
4. **缓存控制**:可以通过设置HTTP头信息(如Cache-Control,ETag等)来控制缓存的行为,例如指定缓存的生命周期,或者根据内容变化来验证缓存是否有效。 5. **事件回调**:支持自定义缓存命中、未命中、更新等事件...
在实际开发中,我们可以通过设置HTTP响应头来控制缓存行为。例如,服务器端代码可以设置`Cache-Control`和`ETag`: ```javascript res.setHeader('Cache-Control', 'max-age=3600'); res.setHeader('ETag', 'W/...
- **响应报文**: 包含200 OK状态码和相应的缓存控制头信息。 #### 七、总结 HTTP缓存机制通过减少网络流量和提高响应速度,极大地优化了用户的Web体验。了解这些基本概念有助于开发者更好地控制资源的缓存行为,...
### Web_HTTP头信息详解 #### HTTP头信息概述 HTTP(Hypertext Transfer Protocol)作为互联网上应用最为广泛的一种网络协议,主要用于规范客户端与服务器之间的数据交互。在HTTP通信过程中,头信息(Header)扮演...
然而,`meta`标签的缓存控制作用通常不如HTTP头信息强大,因为它们只能影响到浏览器的缓存行为,而不能影响到中间缓存服务器。 综上所述,页面的缓存与不缓存设置是通过HTTP协议头和HTML的`meta`标签来实现的,这...
特别地,`Cache-Control`和`Expires`字段可以控制缓存策略,减少不必要的网络传输。 二、响应头控制浏览器行为 1. `Cache-Control`:这个响应头字段用于指定缓存指令,如`no-cache`表示不缓存响应,`max-age`指定...
在PHP中,可以通过设置HTTP头部信息来控制浏览器的缓存行为。以下是一些常用的HTTP头部指令: 1. **Expires** - **作用**:指定页面的有效期,即过期时间。如果当前时间超过该时间,则浏览器不会缓存该页面。 - *...
- 数据一致性:缓存可能导致用户看到的信息不是最新的,尤其是在实时性要求高的场景下。 - 缓存占用空间:大量缓存数据会占用用户设备的存储空间。 - 管理复杂:管理和维护缓存策略需要考虑多个因素,如缓存策略的...
6. **缓存控制**:Ajax请求可以利用HTTP头信息控制缓存,如设置`Cache-Control`或`If-Modified-Since`等字段,优化性能。 7. **安全问题**:Ajax虽然提高了用户体验,但也可能引入安全问题,比如XSS(Cross-site ...
2. **设置HTTP头部信息**:在发送AJAX请求之前,可以通过设置HTTP请求头来控制缓存行为。例如,设置`If-Modified-Since`为0可以强制服务器检查资源是否已更改,如果未更改,则返回304状态码,而不是实际的数据。 ``...
- **缓存处理**:考虑使用HTTP头信息控制缓存,避免不必要的服务器请求。 - **错误处理**:设置合适的超时时间,并处理网络异常、服务器错误等情况。 - **安全性**:防止跨站脚本攻击(XSS)和跨站请求伪造(CSRF...
服务端通过设置HTTP响应头控制浏览器缓存策略: ```java response.setHeader("Pragma", "No-cache"); response.setHeader("Cache-Control", "no-cache"); response.setDateHeader("Expires", -1); %> ``` 这组代码...
客户端缓存通过HTTP头信息控制,如Expires和ETag,确保文件的时效性和更新。 2. 服务器端缓存: 服务器端缓存主要分为静态文件缓存和动态缓存。 - 静态文件缓存:适用于不经常变动的文件,如HTML、CSS、图片等。...
- 缓存策略:利用HTTP头信息控制缓存,减少重复下载。 9. **多线程应用**: - 如果Flash版本支持,利用Worker进行后台处理,避免阻塞UI线程。 10. **调试和性能分析**: - 使用Profiler工具:如Flash Builder的...