最近在学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. iis 站点中文乱码 解决方案

    问题描述:iis乱码问题 1:在vs里开发没问题,发布后用发布文件替换iis文件没问题,但是如果用fis3发布后导致iis站点访问时出现部分中文乱码 原理:文件编码格式不统一 解决方案: 四个步骤解决 ...

  2. 在CentOS下的docker容器中部署spring boot应用的两种方式

    我们通常在 windows 环境下开发 Java,而通常是部署在Linux的服务器中,而CentOS通常是大多数企业的首选,基于Docker的虚拟化容器技术,多数Java应用选择这种方式部署服务.本文 ...

  3. C#特性:ConditionalAttribute

    ConditionalAttribute类 msdn解释: 指示编译器应忽略方法调用或属性,除非已定义指定的条件编译符号. 命名空间: System.Diagnostics 语法: // // 摘要: ...

  4. VUE页面刷新问题

    1). location方式 location.reload() 缺点:刷新页面,卡白 2). router方式 this.$router.go(0) 缺点:同一问题,比一好点 3). provide ...

  5. 【读书笔记】iOS-Web应用程序的自动化测试

    seleniumHQ:https://github.com/seleniumhq/selenium Appium:https://github.com/appium/appium 参考资料:<i ...

  6. Oozie简单配置与使用

    1.Oozie英文翻译 驯象人 2.Oozie简介 一个基于工作流引擎的开源框架,由Cloudera公司贡献给Apache,提供对Hadoop Mapreduce.Pig Jobs的任务调度与协调. ...

  7. MVC与单元测试实践之健身网站(六)-计划的添加与重置

    健身计划需要使用者自己定制,没有现成的内容可供选择.本篇就是关于健身计划的添加与重置功能的一部分. 一 功能描述 a) 关于计划的定制,决定以周期的方式,比如有人会以一周为周期,然后安排每周的1.3. ...

  8. 一种快速部署开发用oracle的办法

    前段时间工作中需要在不少开发环境中快速提供开发可用的oracle环境,由于一一培训并部署原生oracle人力和时间成本过高,后来使用docker版本oracle,大大方便了开发工作的快速启动,方法记录 ...

  9. Python之SGDRegressor

    实现: # -*- coding: UTF-8 -*- import numpy as npfrom sklearn.linear_model import SGDRegressor __author ...

  10. Spring Boot 中配置文件application.properties使用

    一.配置文档配置项的调用(application.properties可放在resources,或者resources下的config文件夹里) package com.my.study.contro ...