Expires和Cache-Control的理解
最近在学Nginx,学到有个地方式设置响应头信息,其中有两项是设置Expires和Cache-Control,来设置缓存时间,后来发现"并没有什么卵用",于是就搜了下资料,把整个思路理顺了。
由于是讲讲Expires和Cache-Control这两个响应头的作用,所以具体怎么添加就不展开,每种语言都有自己的做法,而我刚好在学Nginx,所以就使用Nginx来添加响应头了。
首先,先将浏览器的缓存给清掉,然后浏览一个静态网页(包含一个js和一张图片),请求头和响应头如下:
请求了这3个问题,浏览器会进行缓存,然后刷新页面,会看到全部是304状态
这里主要看If-Modifed-Since和Cache-Control
304状态代表请求的这个文件在服务器中没有变化,具体过程如下:
在第一次请求的时候,服务器会返回Last-Modified字段,后来的请求中,浏览器会把值放在If-Modifed-Since请求头中发送给服务器进行比对,如果文件修改了,那么就返回最新的文件,即200状态;如果没有修改,那么返回304状态,且max-age<=0
再次清空浏览器缓存,然后给响应头加上Expires,时间为1天,然后刷新页面,查看
看下Expires,值是过期的时间。Cache-Control:max-age=86400,表示缓存1天
再次刷新页面,发现居然是304状态,还是想服务器发送请求了
当时这觉得好像和预想的不一样,这种情况下应该没有请求发送才对,因为设置了expires缓存1天
后来查了下资料,发现不用刷新页面了,再刷新还是304,应该是在地址栏按回车。。。。
查到的资料说,地址栏刷新和F5刷新不一样,F5刷新是一定会发送请求的,好吧,那我就按地址栏了。。。。
果然成功了,Transferred显示cached,表示从缓存中取文件,而不是向服务器请求
ps:这里有个问题是这里显示了2条请求记录,有的浏览器是3条(我这里用的是火狐,谷歌是3条)
也就是说,缓存在地址栏回车的时候才有效,另外通过超链接过去的也是有效的,而F5是会发生请求的
然后可以设置一下Expires的值,设置小一点,10s,10s后再地址栏按回车查看,会重新发送请求,Expires的缓存时间设置是成功的
最后,再简单说下Cache-Control的另外一个值,no-store。
如果响应头带有Cache-Control:no-store,那么浏览器每次发生请求都是200,而不会是304
可以自己去试下,这种情况下,浏览器不会保存缓存文件
--------------------- 本文来自 濤_ 的CSDN 博客 ,全文地址请点击:https://blog.csdn.net/u013160932/article/details/50682576?utm_source=copy
Expires和Cache-Control的理解的更多相关文章
- [转]ASP.NET Core: Static Files cache control using HTTP Headers
本文转自:https://www.ryadel.com/en/asp-net-core-static-files-cache-control-using-http-headers/ Every sea ...
- 网站 cache control 最佳实践
推荐阅读: 2020年软件开发趋势 高并发案例 - 库存超发问题 负载均衡的分类及算法 异地多活架构 Postman 的替代品来了 有时,当第二次访问网站时,看起来比较怪,样式不正常. 通常,是因为 ...
- Linux 内存Cache和Buffer理解
在 Linux 系统中,我们经常用 free 命令来查看系统内存的使用状态.在一个 RHEL6 的系统上,free 命令的显示内容大概是这样一个状态: [root@tencent64 ~]# fr ...
- RAC Cache Fusion 原理理解
cache fusion . grd . drm . gcs . ges cache fusion 1.RAC是一个数据库执行在多个实例上.通过DLM(Distributed ...
- lab4 Cache Geometries 深入理解计算机系统——高速缓存
这个实验主要是将高速缓存命中的一点东西,意在告诉我们平常多注意这方面的东西. 不懂java的,所以只管C的部分. You will do this several times, making smal ...
- 缓存(cache)的理解
缓存的特点: 读取速度很快,容量相比硬盘较小: 缓存在实现时,本质上仍然是一块内存区域: cache 机制的一个核心关注点还在于,究竟什么样的数据应该放在缓存中,显然不是所有,那就应当是部分,就应该是 ...
- Symfony2学习笔记之HTTP Cache
富web应用程序的本质意味着它们的动态.无论你的应用程序多么有效率,每个请求比起静态文件来说总会存在很多的耗费.对于大多数web程序来说,这没什么. Symfony2非常的轻快,无论你做些严重超载的请 ...
- http缓存提高性能
秋招也算是正式结束了,现在整理一下笔记,当作巩固一下知识,也希望这个对大家有帮助 http 缓存 和 cdn 缓存可以说是面试必问的问题,竟然是必问的问题,那就总结全面一点- http缓存机制 缓存分 ...
- HTTP请求中的缓存(cache)机制
http://www.chaorenmao.com/blog/?p=79 流程 当资源第一次被访问的时候,HTTP头部如下 (Request-Line) GET /a.html HTTP/1.1Ho ...
- 前端性能优化:Add Expires headers
前端性能优化:Add Expires headers Expires headers 是什么? Expires headers:直接翻译是过期头.Expires headers 告诉浏览器是否应该从服 ...
随机推荐
- Mysql常用单词
Create 建造,创造Data数据Database数据库(缩写db)If如果Not没有Exists存在Table表Drop 去掉Delete删除Show展示Select选择Default默认Uniq ...
- T-SQL:开窗函数(十二)
1.基本概念 开窗函数分为两个部分分别是 1.聚合,排名,偏移,分布函数 . 2.开窗分区,排序,框架. 下面举个例子 SELECT empid, ordermonth, val, SUM(val) ...
- LINQ 【高级查询】
using (Data0216DataContext con = new Data0216DataContext()) { List<Users> ulist = con.Use ...
- 【Java基础】1、java中的instanceof
instanceof是Java.php的一个二元操作符(运算符),和==,>,<是同一类东西.由于它是由字母组成的,所以也是Java的保留关键字.它的作用是判断其左边对象是否为其右边类的实 ...
- List排序Collections.sort 重写compare
static List<Integer> intList = Arrays.asList(2,5,7, 3, 1); public static void main(String[] ar ...
- GCC链接的几个注意点
库文件依赖顺序 GCC在链接时对依赖库的顺序是敏感的,被依赖的库必须放在后面,比如liba.a依赖libb.a,必须写成liba.a libb.a,否则链接将出错.在库比较多依赖关系比较复杂或者相互依 ...
- Confluence设置MySQL数据库报错:必须使用'READ-COMMITTED'作为默认隔离级别。
解决方案: mysql -u root -p123456 SET GLOBAL tx_isolation='READ-COMMITTED'; mysql数据库创建 1.设置mysql隔离级别 SET ...
- git 本地仓库与远程仓库建立连接
我们在使用git clone的时候可能会报错: Could not read from remote repository.Please make sure you have the correct ...
- 自定义jq插件,鼠标悬浮展示图片或者视频放大图,可自定义展示内容
网站项目经常会遇到一些视频或者图片素材的展示功能,那么就需要自己写一个功能,就是在一些列表页面你想要是这个数据的详细内容,弹框在页面某个位置 例如这是视频悬浮展示效果,可自定义自动播放等属性标签 又例 ...
- BZOJ4756: [Usaco2017 Jan]Promotion Counting(线段树合并)
题意 题目链接 Sol 线段树合并板子题 #include<bits/stdc++.h> using namespace std; const int MAXN = 400000, SS ...