当前位置: 首页 > 编程日记 > 正文

HTTP缓存——304与200 from cache

个人博客原文地址

HTTP与缓存相关的字段

1. 通用字段

字段名称释义
Cache-Control控制缓存具体的行为
PragmaHTTP1.0时的遗留字段,当值为"no-cache"时强制验证缓存
Date创建报文的日期时间(启发式缓存阶段所用)

2. response字段

字段名称释义
ETag服务器生成资源的唯一标识
Vary代理服务器缓存的管理信息
Age资源在缓存代理中存贮的时长(取决于max-age和s-maxage的大小)

3. request字段

字段名称释义
If-Match条件请求,携带上一次请求中资源的ETag,服务器根据这个字段判断文件是否有新的修改
If-None-Match和If-Match作用相反,服务器根据这个字段判断文件是否有新的修改
If-Modified-Since比较资源前后两次访问最后的修改时间是否一致
If-Unmodified-Since比较资源前后两次访问最后的修改时间是否一致

4. 实体字段

字段名称释义
Expires告知客户端资源缓存失效的绝对时间
Last-Modified资源最后一次修改的时间

协商缓存(304)

If-modified-Since/Last-Modified
  • 浏览器在发送请求的时候服务器会检查请求头request header里面的If-modified-Since,如果最后修改时间相同则返回304,否则给返回头(response header)添加last-Modified并且返回数据(response body)。
if-modified-since:Wed, 31 May 2017 03:21:09 GMT
if-none-match:"42DD5684635105372FE7720E3B39B96A"
If-None-Match/Etag
  • 浏览器在发送请求的时候服务器会检查请求头(request header)里面的if-none-match的值与当前文件的内容通过hash算法(例如 nodejs: cryto.createHash('sha1'))生成的内容摘要字符对比,相同则直接返回304,否则给返回头(response header)添加etag属性为当前的内容摘要字符,并且返回内容。
etag:"42DD5684635105372FE7720E3B39B96A"
last-modified:Wed, 31 May 2017 03:21:09 GMT

请求头last-modified的日期与响应头的last-modified一致
请求头if-none-match的hash与响应头的etag一致
所用会返回Status Code: 304

强缓存(200 from cache)

  • 如果设置了Expires(XX时间过期)或者Cache-Control(http1.0不支持)(经历XX时间后过期)且没有过期,命中cache的情况下,from cache不去发出请求。如果强刷(如ctrl+r)会发起请求,但是如果没有修改会返回304内容未修改,如果已经改变则返回新内容。max-age > Expires
  • expires/cache-control 虽然是强缓存,但用户主动触发的刷新行为,还是会采用缓存协商的策略,主动触发的刷新行为包括点击刷新按钮、右键刷新、f5刷新、ctrl+f5刷新等。
  • 当然如果在控制台里面选中了disable cahce则无论如何都会请求最新内容(304协商缓存、强缓存都无效),因为1.不会检查本地是否有缓存。2.请求头信息(request header)既没有If-Modified-Since也没有If-None-Match来让服务端判断。地址栏输入的地址按下回车键,该地址页面请求(仅仅是该url)的request header都会带上cache-contro:max-age=0,所以不会命中强缓存,但是通过链接点击的地址会命中缓存
  • chrome下查看所有的from cache文件:chrome://view-http-cache/

区别

  • 触发 200 from cache:
  1. 直接点击链接访问
  2. 输入网址按回车访问
  3. 二维码扫描
  • 触发 304:
  1. 刷新页面时触发
  2. 设置了长缓存、但Entity Tags没有移除时触发

流程图

流程图

GitHub:wclimb

相关文章:

一个多年网络工程师总结的工作实用经验

转载自:51CTO下载频道 1、 交换机选购指南l 设备基本指标:网络接口类型、用户可用插槽数、端口密度。l 设备功能指标:VLAN划分、堆叠、单播和组播协议支持、可网管。l 设备性能指标:背板带宽、包转…

【Qt】Qt再学习(十六):QObject::connect: Cannot queue arguments of type ‘QString‘

1、问题描述 跨线程使用信号和槽时,如果是非const的引用传参,就会报如下的错误: QObject::connect: Cannot queue arguments of type QString& (Make sure QString& is registered using qRegisterMetaType().)2、测试示例 #include <QCoreApplication>

微软提出极低资源下语音合成与识别新方法,小语种不怕没数据!| ICML 2019

作者 | 谭旭转载自微软研究院AI头条&#xff08;ID: MSRAsia&#xff09;编者按&#xff1a;目前&#xff0c;人类使用的语言种类有近7000种&#xff0c;然而由于缺乏足够的语音-文本监督数据&#xff0c;绝大多数语言并没有对应的语音合成与识别功能。为此&#xff0c;微软亚洲…

面试准备--7.31

22222转载于:https://www.cnblogs.com/czlovezmt/p/9398015.html

那些年,让我面试头大的几个排序算法,今天终于搞懂了!

作者 | 逆流的鱼yuiop转载自何俊林&#xff08;ID:smartyuge&#xff09;算法上&#xff0c;最基础的就是排序算法&#xff0c;几乎在面试中&#xff0c;或多或少会要求你手写一些基础算法。今天鱼哥带大家这些基础算法回顾下。快速排序介绍&#xff1a;快速排序&#xff08;Qu…

【天线】天线基础:名词解释

1、定向天线和全向天线 先上图&#xff0c;第一张图是定向天线&#xff08;一根棍子加一块板&#xff09;&#xff0c;第二张图是全向天线&#xff08;一根棍子&#xff09; 网上的几种解释&#xff1a; 全向天线就是一个棍子&#xff0c;围绕棍子有一圈儿信号&#xff1b;定…

springBean生命周期----来自spring实战总结

1、Spring对bean进行实例化 2、Spring将值和bean的引用注入到bean对应的属性中(比如说注入到被依赖的bean的方法中或属性里) 3、如果bean实现了BeanNameAware接口,将会将bean的Id传入setBeanName()方法中 4、如果bean实现了BeanFactoryAware接口,将会设置bean的BeanFactory的引…

disk boot failure,insert system disk and press enter

每次一开机就出现提示:"disk boot failure,insert system disk and press enter"http://topic.csdn.net/t/20061202/08/5201096.html 转载于:https://blog.51cto.com/yfb880106/857829

深度讲解:web前端性能优化

一、课程简介&#xff1a; 1、课程大纲 涉及到的分类 网络层面构建层面浏览器渲染层面服务端层面涉及到的功能点 资源的合并与压缩图片编解码原理和类型选择浏览器渲染机制懒加载预加载浏览器存储缓存机制PWAVue-SSR前端性能优化原理 作用及原理如何与真实业务场景结合理论结合…

Google Android向华为“闭源”,华为手机迎来至暗时刻!

作者 | 屠敏转载自CSDN&#xff08;ID&#xff1a;CSDNnews&#xff09;居安思危任正非&#xff0c;未雨绸缪如华为。在贸易战的背景下&#xff0c;即使早在多年前已在多个层面做好“备胎”计划的华为&#xff0c;在面对美国对芯片乃至操作系统等系列釜底抽薪的打压时&#xff…

【C++】C++好书推荐

一、吴咏炜推荐 1、入门级 Bjarne Stroustrup, A Tour of C, 2nd ed. Addison-Wesley, 2018 中文版&#xff1a; 王刚译&#xff0c;《C 语言导学》(第二版&#xff09;。机械工业出版社&#xff0c;2019 Bjarne Stroustrup, The C Programming Language, 4th ed. Addison-W…

HDOJ2569 ( 彼岸 ) 【递推公式】

f13f29f321f451猜测f(n)2*f(n-1)f(n-2)在纸上打草稿写出f3的情况&#xff0c;然后推出f4的情况&#xff08;在f3后边加*2或*3就成&#xff09;f3 f4 f3 f4 f3 f4111*3 222*3 333*3112*2 221*2 331*2113*2 223*2 332*2121*2 212*2 313*2131*2 …

【C++】new和malloc的区别

一、显而易见的区别 1、属性 new/delete是C关键字&#xff0c;需要编译器支持&#xff1b; malloc/free是库函数&#xff0c;需要头文件支持。 2、参数 使用new操作符申请内存分配时&#xff0c;无须指定内存块的大小&#xff0c;编译器会根据类型信息自行计算&#xff1b;…

消息队列的面试题7

1、面试题 如果让你写一个消息队列&#xff0c;该如何进行架构设计啊&#xff1f;说一下你的思路 2、面试官心里分析 其实聊到这个问题&#xff0c;一般面试官要考察两块&#xff1a; &#xff08;1&#xff09;你有没有对某一个消息队列做过较为深入的原理的了解&#xff0c;或…

《使女的故事》大火,AI是背后最大推手?

作者 | Just、Rachel出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09;还记得大火的美剧《使女的故事》吗&#xff1f;先别着急回答&#xff0c;这次我们不讲剧情&#xff0c;而要说的是这部剧背后的发行方是美国 Hulu 网站。该网站是美国第二大付费在线视频平台&#…

jQuery事件处理一瞥

以前部门一直都是使用一个名为QTT的JS框架。最近老大提出要转用jQuery框架&#xff0c;需要将旧框架的一些JQ没有实现的功能移植到JQ中去。当我移植到event库的时候&#xff0c;以下是其代码&#xff1a; QTT.event {KEYS : {BACKSPACE : 8,TAB : 9,RETURN : 13,ESC : 27,SPAC…

【C++】零散知识

1、抛异常时&#xff0c;还会执行析构操作吗&#xff1f; 发生异常&#xff08;抛异常&#xff09;时&#xff0c;在该作用域中的局部非PAD变量&#xff08;即&#xff0c;有构造函数和析构函数的变量&#xff09;会执行析构操作。 2、new出的内存一定在堆上吗&#xff1f; …

百度景鲲“升职记”

整理 | 琥珀出品 | AI科技大本营&#xff08;id&#xff1a;rgznai100&#xff09;近日&#xff0c;据多家媒体报道&#xff0c;百度人力资源负责人崔珊珊发出晋升邮件宣布&#xff0c;智能生活事业群总经理景鲲晋升为副总裁。百度在晋升邮件中评价他&#xff1a;“敢打硬仗、能…

南通市公积金信息系统goldengate复制软件采购

&#xff08;二&#xff09;容灾软件部分&#xff1a;2套Oracle GoldenGate 11G ,1 CPU&#xff08;必须提供原厂商针对本项目授权、质保承诺&#xff09;。特性指标系统平台支持1. 支持主流操作系统&#xff0c;包括&#xff1a;IBM AIX、HP-UX、Linux、Sun Solaris、Mic…

开源需自立!Android、GitHub、Apache全线告急!

作者 | 胡巍巍&伍杏玲责编 | 唐小引出品 | CSDN&#xff08;ID&#xff1a;CSDNnews&#xff09;华为四面楚歌&#xff0c;“破窗效应”爆发&#xff01;继5月16日美国商务部工业与安全局&#xff08;BIS&#xff09;将华为列入“实体清单”之后&#xff0c;越来越多的美国…

【C】linux下切换工作目录至程序所在目录

1、获取当前程序的绝对路径 /proc/self/exe是一个符号链接&#xff0c;代表当前程序的绝对路径 用readlink读取/proc/self/exe可以获取当前程序的绝对路径 2、从字符串中获取目录 char dirname(char path); 3、改变当前工作目录 int chdir(const char *path ); 4、完整示…

Eclipse基金会发布Eclipse Photon IDE

Eclipse基金会发布了最新版本的Eclipse IDE。Eclipse Photon带来对Java 10和Java EE 8的支持&#xff0c;增强了PHP开发工具和Dark主题等功能。\\Eclipse Java开发工具&#xff08;Eclipse Java Development Tools&#xff0c;JDT&#xff09;对Java 10提供了完整的支持&#x…

【C++】智能指针(一)入门

1、 智能指针背后的设计思想 智能指针背后的思想是RAII&#xff0c;参见博客【C】零散知识 我们先来看一个简单的例子&#xff1a; void remodel(std::string & str) {std::string * ptr new std::string(str);...if (weird_thing())throw exception();str *ptr; dele…

Oracle 11g Release 1 (11.1) PL/SQL_多维 Collection 类型和其异常

本文内容 多维 Collection Collection 异常 多维 Collection 虽然 collection 只有一维的&#xff0c;但可以模型一个多维的。创建一个 collection&#xff0c;其每个元素也是 collection 。例如&#xff0c;创建一个 varray 的 nested table&#xff0c;一个 varray 的 varray…

入门系列之使用fail2ban防御SSH服务器的暴力破解攻击

欢迎大家前往腾讯云社区&#xff0c;获取更多腾讯海量技术实践干货哦~ 本文由SQL GM 发表于云社区专栏 介绍 对于SSH服务的常见的攻击就是暴力破解攻击——远程攻击者通过不同的密码来无限次地进行登录尝试。当然SSH可以设置使用非密码验证验证方式来对抗这种攻击&#xff0c;例…

谁能解答我对知识图谱的上百个疑问?

近日&#xff0c;我们采访了东南大学认知智能研究所所长漆桂林教授和复旦大学知识工场实验室负责人肖仰华教授&#xff0c;围绕知识图谱这两年在研究与产业应用道路上的一些进展与仍面临的问题。漆桂林教授提到&#xff0c;近两年&#xff0c;知识图谱的研究在四大关键技术上都…

ecshop 商品颜色尺寸仿淘宝选择功能教程(2.7.0版本)

牵涉到的修改文件(default模板为例) /themes/default/style.css /themes/default/goods.dwt 注:此路径待修改模板路径.修改步骤:一:控制样式 1.打开/themes/ecshop/p_w_picpaths 加添图片test.gif. 2.打开/themes/ecshop/style.css 最下面添加: /*--------------颜色选择器CSS添…

【C++】Effective STL:50条有效使用STL的经验

第一条&#xff1a;慎重选择容器类型 1、C容器&#xff1a;先混个眼熟 序列容器&#xff1a;array、vector、string、deque、list、forward_list 有序关联容器&#xff1a;set、map、multiset、multimap 无序关联容器&#xff1a;unordered_set、unordered_map、unordered_mu…

ICML 2019接受论文:清华、北大领跑,谷歌强压枝头,BAT略显“低调”

整理 | 刘畅责编 | Jane、Rachel出品 | AI科技大本营&#xff08;id&#xff1a;rgznai100&#xff09;【AI科技大本营导语】今年 6 月&#xff0c;机器学习领域顶会 ICML 2019 将在美国举行。为了帮助大家更好了解会议论文的情况&#xff0c;博世&#xff08;Bosch&#xff09…

C++STL 优先队列priority_queue使用

头文件&#xff1a;#include <queue> 一.申明方式 std::priority_queue<T> q; std::priority_queue<T, std::vector<T>, cmp> q;1.普通方法&#xff1a; priority_queue<int> q; //大的优先级高 priority_queue<int,vector<int>, …