HTTP缓存初识
2024-09-05 17:03:35
参考:
http://muchstudy.com/2016/08/18/HTTP%E7%BC%93%E5%AD%98%E8%AF%A6%E8%A7%A3/
https://aotu.io/notes/2016/09/22/http-caching/
http://www.cnblogs.com/chenqf/p/6386163.html
一、HTTP缓存
- 强制缓存
- 协商缓存(对比缓存)
1、强制缓存
名称 | 说明 |
---|---|
Expires | 响应失效的日期和时间。类似于:Expires:Sat, 20 Aug 2016 01:40:57 GMT,绝对值,告诉客户端在这个时间点之后资源过期,需要重新从服务器取。 |
Cache-Control | 类似于:Cache-Control:max-age=315360000,相对值,在多久后过期 |
通过上面两种方式,当资源的缓存还在有效期时,浏览器直接从本地缓存中取资源,而不是发起HTTP请求从源服务器取。由于客户端与服务器端存在时间差,Expires并不是那么的靠谱,所以建议使用max-age。
2、协商缓存
名称 | 说明 |
---|---|
If-Modified-Since \ Last-Modified | 告诉服务器只要服务器在这个时间之后又对资源做了修改则发送该资源 |
If-None-Match 与 ETag | 根据资源内容是否变更来判断是否继续使用本地缓存。第一次请求资源时,服务器在response头信息中设置ETag,当资源过期后再次向服务器请求时用If-None-Match:ETag去验证资源是否变更 |
静态资源
JS
CSS
图片
二进制文件
在文件或者路径中嵌入指纹,避免使用查询字符串。确保生成的URL长度超过8个不通的字符。
使用这些HTTP响应头:
- Cache-Control: public, max- age=31536000
- Expires: (一年后的今天)
- ETag: (基于内容生成)
- Last-Modified: (过去某个时间)
- Vary: Accept-Encoding
动态资源
使用如下响应头:
- Cache-Control: public, max-age=0
- Expires: (当前时间)
- ETag: (基于内容生成)
- Last-Modified: (过去某个时间)
- Vary: Accept-Encoding
二、总结
对于强制缓存,服务器通知浏览器一个缓存时间,在缓存时间内,下次请求,直接用缓存,不在时间内,执行比较缓存策略。
对于比较缓存,将缓存信息中的
Etag
和Last-Modified
通过请求发送给服务器,由服务器校验,返回304状态码
时,浏览器直接使用缓存。
浏览器第一次请求:
浏览器再次请求时:
最新文章
- CSS3鼠标滑过动画线条边框特效
- 一款开源免费跨浏览器的视频播放器--videojs使用介绍
- JDK环境变量设置
- urllib2抓取HTML存入Excel
- java IO 学习总结
- 【转载】让windows使用linux系统的命令
- Linq之常见关键字
- 【阿里云产品公测】以开发者角度看ACE服务『ACE应用构建指南』
- SQL 生成可配置流水号
- fsck 修复ext3文件系统(用于linux系统时间不对,文件系统信息有错引起的die with exit status等的一些问题)
- Servlet 的基本架构
- 12本最优秀的Android开发电子书强力推荐
- framework各版本新特性(为面试准备)
- javascript01
- java实现 redis的发布订阅(简单易懂)
- Flask开发微电影网站(二)
- orcl数据库命令行怎么导入dmp格式的文件
- jeecg自定义按钮使用exp属性不起作用
- 【模板】ST表
- 使用matplotlib.pylab绘制分段函数