最近在学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的理解的更多相关文章

  1. [转]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 ...

  2. 网站 cache control 最佳实践

    推荐阅读: 2020年软件开发趋势 高并发案例 - 库存超发问题 负载均衡的分类及算法 异地多活架构 Postman 的替代品来了 有时,当第二次访问网站时,看起来比较怪,样式不正常. 通常,是因为 ...

  3. Linux 内存Cache和Buffer理解

    在 Linux 系统中,我们经常用 free 命令来查看系统内存的使用状态.在一个 RHEL6 的系统上,free 命令的显示内容大概是这样一个状态:   [root@tencent64 ~]# fr ...

  4. RAC Cache Fusion 原理理解

    cache fusion  .   grd  .  drm   .   gcs  .   ges cache fusion  1.RAC是一个数据库执行在多个实例上.通过DLM(Distributed ...

  5. lab4 Cache Geometries 深入理解计算机系统——高速缓存

    这个实验主要是将高速缓存命中的一点东西,意在告诉我们平常多注意这方面的东西. 不懂java的,所以只管C的部分. You will do this several times, making smal ...

  6. 缓存(cache)的理解

    缓存的特点: 读取速度很快,容量相比硬盘较小: 缓存在实现时,本质上仍然是一块内存区域: cache 机制的一个核心关注点还在于,究竟什么样的数据应该放在缓存中,显然不是所有,那就应当是部分,就应该是 ...

  7. Symfony2学习笔记之HTTP Cache

    富web应用程序的本质意味着它们的动态.无论你的应用程序多么有效率,每个请求比起静态文件来说总会存在很多的耗费.对于大多数web程序来说,这没什么. Symfony2非常的轻快,无论你做些严重超载的请 ...

  8. http缓存提高性能

    秋招也算是正式结束了,现在整理一下笔记,当作巩固一下知识,也希望这个对大家有帮助 http 缓存 和 cdn 缓存可以说是面试必问的问题,竟然是必问的问题,那就总结全面一点- http缓存机制 缓存分 ...

  9. HTTP请求中的缓存(cache)机制

    http://www.chaorenmao.com/blog/?p=79 流程 当资源第一次被访问的时候,HTTP头部如下 (Request-Line)  GET /a.html HTTP/1.1Ho ...

  10. 前端性能优化:Add Expires headers

    前端性能优化:Add Expires headers Expires headers 是什么? Expires headers:直接翻译是过期头.Expires headers 告诉浏览器是否应该从服 ...

随机推荐

  1. 浅谈MemCahe

    MemCahe 首先介绍下memcahce的定义:是一个分布式的高速缓存系统,目前被许多网站使用以提升网站的访问速度,尤其对于一些大型的.需要频繁访问数据库的网站访问速度提升效果十分显著. 接下来介绍 ...

  2. [PHP] 算法-数组中出现次数超过一半的数字的PHP实现

    数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字.例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}.由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2.如果不存在 ...

  3. Mybatis关联查询之一对多和多对一XML配置详解

    平时在开发过程中dao.bean和XML文件都是自动生成的,很少写XML的配置关系,今天记录一下mybatis的关联查询中的多对一和一对多的情况. 首先是有两张表(学生表Student和老师Teach ...

  4. [转]---UAP中如何判断当前APP在哪个平台设备上运行

    在做Win10开发的时候,我们可能经常会需要获得当前程序在在哪个平台设备上运行,用于UI和相关API的调用,那么可以通过什么方式知道当前APP运行的平台呢? 今天这里提供两个方法给大家做参考: 方法一 ...

  5. 详解 ESLint 规则,规范你的代码

    在很久之前就想通过工具来规范自己的代码风格,减少程序出错的概率,如果看过我的 一个前端程序猿的Sublime Text3的自我修养 ,这篇博客的朋友,肯定知道在当时我使用 SublimeLinter- ...

  6. mac 上运行httpserver的问题

    如果你的系统是window 我建议你安装http-server 非常好用, 如果是mac,系统自带的就有httpserver 服务,没有必要在安装 按照我说的来操作 首先 sudo apachectl ...

  7. Window7 上跑 Spark 单机模式

    一.下载Spark 下载地址:http://www.eu.apache.org/dist/spark/spark-1.5.2/spark-1.5.2-bin-hadoop2.4.tgz 我这里测试这个 ...

  8. putty之pscp上传文件

    控制台下打开pscp可执行文件 命令 >pscp -i 证书名 -r 要上传的文件 root@服务器路径:/opt

  9. MinGW编译Mongo-CXX-Driver

    8. mongo-cxx-driver pacman -S mingw-w64-x86_64-cyrus-sasl pacman -S mingw-w64-x86_64-extra-cmake-mod ...

  10. JS笔记(二):对象

    (一) 对象 对象是JS的基本数据类型,类似于python的字典.然而对象不仅仅是键值对的映射,除了可以保持自有的属性,JS对象还可以从一个称为原型的对象继承属性,对象的方法通常是继承的属性.(这种对 ...