http304状态码缓存设置问题

当浏览器第一次加载资源的时候,返回一般为200,意思是成功获取资源,并会在浏览器的缓存中记录下max-age,第二次访问的时候:
如果只是用浏览器打开,那么浏览器会去判断这个资源在缓存里有没有,如果有的话,会去判断max-age,看看过期没有,如果没有过期,则直接读缓存,根本不会和服务器进行交互,换句话说,断网都能打开,就和本地跑一样!如果已经过期了,那就去服务器请求,等待服务器响应,这是很费时间的,服务器如果发现资源没有改变过,那么就会返回304,告诉浏览器,我没变过,你去读缓存吧,于是浏览器也不用从服务器拉数据了,然而,等待服务器响应也是一个很要命的问题,在网速发达的今天,等一个响应,有时比下载还慢。
如果是用浏览器刷新的,那么浏览器不会去判断max-age了,直接去服务器拿,如果服务器判断资源没变过,则还是会返回304,和上面是一样的,所以刷新一下,其实很可怕,等于把所有的资源都要去服务器请求一边,问问服务器我过期了没有。
综上,尽量减少网页的资源数量!尽量合并JS CSS 图片!响应速度将会猛增!

3xx (重定向) 
要完成请求,需要进一步操作。通常,这些状态码用来重定向。Google 建议您在每次请求中使用重定向不要超过 5 次。您可以使用网站管理员工具查看一下 Googlebot 在抓取重定向网页时是否遇到问题。诊断下的网络抓取页列出了由于重定向错误导致 Googlebot 无法抓取的网址。

300(多种选择)针对请求,服务器可执行多种操作。服务器可根据请求者 (user agent) 选择一项操作,或提供操作列表供请求者选择。
301(永久移动)请求的网页已永久移动到新位置。服务器返回此响应(对 GET 或 HEAD 请求的响应)时,会自动将请求者转到新位置。您应使用此代码告诉 Googlebot 某个网页或网站已永久移动到新位置。
302(临时移动)服务器目前从不同位置的网页响应请求,但请求者应继续使用原有位置来响应以后的请求。此代码与响应 GET 和 HEAD 请求的 301 代码类似,会自动将请求者转到不同的位置,但您不应使用此代码来告诉 Googlebot 某个网页或网站已经移动,因为 Googlebot 会继续抓取原有位置并编制索引。
303(查看其他位置)请求者应当对不同的位置使用单独的 GET 请求来检索响应时,服务器返回此代码。对于除 HEAD 之外的所有请求,服务器会自动转到其他位置。
304(未修改)

自从上次请求后,请求的网页未修改过。服务器返回此响应时,不会返回网页内容。

如果网页自请求者上次请求后再也没有更改过,您应将服务器配置为返回此响应(称为 If-Modified-Since HTTP 标头)。服务器可以告诉 Googlebot 自从上次抓取后网页没有变更,进而节省带宽和开销。

.
305(使用代理)请求者只能使用代理访问请求的网页。如果服务器返回此响应,还表示请求者应使用代理。
307(临时重定向)服务器目前从不同位置的网页响应请求,但请求者应继续使用原有位置来响应以后的请求。此代码与响应 GET 和 HEAD 请求的 <a href=answer.py?answer=>301</a> 代码类似,会自动将请求者转到不同的位置,但您不应使用此代码来告诉 Googlebot 某个页面或网站已经移动,因为 Googlebot 会继续抓取原有位置并编制索引。
打算将cache-control的各个值都试一遍,看看最终效果是否和预期一致。 
   先尝试max-age。其作用是:假如请求了服务器并在a时刻返回响应结果,则在max-age规定的秒数内,浏览器将不会发送对应的请求到服务器,数据由缓存直接返回;超过这一时间段才进一步由服务器决定是返回新数据还是仍由缓存提供。 
   设置max-age的方式是tomcat的filter。 
Java代码  
  1. package itims;  
  2. public class TestHTTP implements Filter{  
  3.     private static transient Log logger = LogFactory.getLog(TestHTTP.class);   
  4.     @Override  
  5.     public void destroy() {  
  6.           
  7.     }  
  8.   
  9.     @Override  
  10.     public void doFilter(ServletRequest servletrequest,  
  11.             ServletResponse servletresponse, FilterChain filterchain)  
  12.             throws IOException, ServletException {  
  13.         filterchain.doFilter(servletrequest, servletresponse);  
  14.         if (servletrequest instanceof HttpServletRequest && servletresponse instanceof HttpServletResponse) {    
  15.             HttpServletRequest request = (HttpServletRequest) servletrequest;    
  16.             HttpServletResponse response = (HttpServletResponse) servletresponse;    
  17.              logger.info("request.getRequestURI:"+request.getRequestURI());  
  18.                 response.setHeader("Cache-Control", "max-age=" + cacheTime);    
  19.         }  
  20.     }  
  21.     @Override  
  22.      public void init(FilterConfig arg0) throws ServletException {     
  23.          }   
  24. }  

web.xml,只针对js和css文件进行设置。 
Xml代码  
  1. <filter>  
  2.      <filter-name>cache-filter</filter-name>  
  3.      <filter-class>itims.TestHTTP</filter-class>  
  4.      <init-param>  
  5.            <param-name>cache-time</param-name>  
  6.            <param-value>30</param-value>  
  7.         </init-param>  
  8. </filter>  
  9.   
  10. <filter-mapping>  
  11.        <filter-name>cache-filter</filter-name>  
  12.        <url-pattern>*.js</url-pattern>  
  13.    </filter-mapping>  
  14.      
  15.    <filter-mapping>  
  16.        <filter-name>cache-filter</filter-name>  
  17.        <url-pattern>*.css</url-pattern>  
  18. </filter-mapping>  

httpTest.jsp 
Html代码  
  1. <%@ page language="java" contentType="text/html; charset=ISO-8859-1"  
  2.     pageEncoding="ISO-8859-1"%>  
  3. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">  
  4. <%  
  5.     String path = (String) request.getContextPath();  
  6. %>  
  7. <html>  
  8.     <head>  
  9.         <!--   
  10.         <meta http-equiv="refresh" content="5;url=http://localhost:8088/itims/testRRD.action"> 
  11.         -->  
  12.         <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />  
  13.         <script type="text/javascript" src="<%=path%>/widget/jquery/jquery-1.3.2.min.js"></script>  
  14.         <title>httpTest</title>  
  15.     </head>  
  16.     <body>  
  17.         <p>  
  18.             success!  
  19.         </p>  
  20.     </body>  
  21. </html>  

在浏览器内输入httpTest.jsp,则抓取的请求/响应信息如下: 
Java代码  
  1. http://localhost:8088/itims/widget/jquery/jquery-1.3.2.min.js  
  2.   
  3. GET /itims/widget/jquery/jquery-1.3.2.min.js HTTP/1.1  
  4. Host: localhost:8088  
  5. User-Agent: Mozilla/5.0 (Windows NT 5.1; rv:6.0) Gecko/20100101 Firefox/6.0  
  6. Accept: */*  
  7. Accept-Language: zh-cn,zh;q=0.5  
  8. Accept-Encoding: gzip, deflate  
  9. Accept-Charset: GB2312,utf-8;q=0.7,*;q=0.7  
  10. Connection: keep-alive  
  11. Referer: http://localhost:8088/itims/springTest.jsp  
  12. Cookie: JSESSIONID=4B83B20F13BBCD37D1C0FB406807FA75  
  13. If-Modified-Since: Sun, 28 Aug 2011 13:06:44 GMT  
  14. If-None-Match: W/"57254-1314536804640"  
  15.   
  16. HTTP/1.1 304 Not Modified  
  17. Server: Apache-Coyote/1.1  
  18. Etag: W/"57254-1314536804640"  
  19. Cache-Control: max-age=30  
  20. Date: Sun, 28 Aug 2011 13:19:35 GMT  

jquery-1.3.2.min.js的max-age被设置为30秒。即30秒内,无论用户在浏览器地址栏上敲多少次回车,后台也不应该打印日志,而我这个信息抓取工具也不应该抓取到任何信息。事实的确如此。注意,不同的操作方式影响最终结果,原因是刷新和强制刷新会额外发送cache-control信息。 
f5或刷新按钮:cache-control:max-age=0 
ctrl+f5:cache-control:no-cache 
        pragma:no-cache 
疑难杂症: 
1、为什么把缓存清干净并访问页面后,再次通过按回车访问页面时,浏览器却不再发送请求了,而按f5又可以? 
   答:观察响应信息可知,把缓存清干净后cache-control的设置消失了,原因不明。如果按回车,则此时缓存永远都起作用,自然不用访问服务器;而按f5则是强制访问,且此时cache-control的设置又能出现,所以之后所有的访问都遵循cache-control的设置。

转载于:https://www.cnblogs.com/panxuejun/p/5842069.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/286368.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

10.2.0.5启动enterprise manager

10.2.0.5启动enterprise manager OEM作为一个实用工具&#xff0c;随着10g和11g的普及&#xff0c;OEM功能越来越强大&#xff0c;oem也应用越来越广泛。但是如果是10.2.0.5的版本&#xff0c;并且安装时间在2010年1月之后&#xff0c;可能会遇到OEM无法启动的情况&#xff0c;…

【数据结构与算法】多种语言(VB、C、C#、JavaScript)系列数据结构算法经典案例教程合集目录

文章目录1. 专栏简介2. 专栏地址3. 专栏目录1. 专栏简介 2. 专栏地址 「 刘一哥与GIS的故事 」之《数据结构与算法》 3. 专栏目录 【经典回放】多种语言系列数据结构算法&#xff1a;二叉树&#xff08;JavaScript版&#xff09;【经典回放】多种语言系列数据结构算法&#…

《iVX 高仿美团APP制作移动端完整项目》03 推介信息及推荐商家分析及制作

点击整个专栏查看其它系列文章 &#xff08;系列文章更新中…&#xff09;&#xff1a;《iVX 高仿美团APP制作移动端完整项目》 项目界面预览&#xff1a; 一、推荐信息制作 推荐信息与之前的标题下推荐信息制作类似&#xff1a; 此时依旧创建一个行&#xff0c;设置其上下…

C语言试题十二之m个人的成绩存放在score数组中,请编写函数function,它的功能是:将低于平均分的人数作为函数值返回,将低于平均分的分数放在below所指定的数组中。

✅作者简介:大家好我是码莎拉蒂,CSDN、华为云、阿里云、51CTO博客专家🥇🥇🥇 📃个人主页:个人主页 🔥系列专栏:C语言试题200例目录 💬推荐一款刷算法、笔试、面经、拿大公司offer神器 👉 点击跳转进入网站 1、 题目 m个人的成绩存放在score数组中,请编写函…

yum的三种方式

RHEL5中实现各种服务的准备条件&#xff1a;(一)、制作YUM本地源&#xff1a;YUM简介&#xff1a;YUM是Yellow dog Updater Modified的简称&#xff0c;yum是软件的仓库&#xff0c;它可以是http或ftp站点&#xff0c;也可以是本地软件池&#xff0c;但必须包含rpm的header&…

利用百度云盘API上传文件至百度云盘

一、获取Access Token示例 1. 请您将以下HTTP请求直接粘贴到浏览器地址栏内&#xff0c;并按下回车键。 https://openapi.baidu.com/oauth/2.0/authorize?response_typetoken&client_idL6g70tBRRIXLsY0Z3HwKqlRE&redirect_urioob&scopenetdisk 2、执行后&#x…

Docker 容器抓包

背景介绍程序在运行期间出现问题时&#xff0c;通常会通过抓包的方式来分析、定位问题。非容器应用一般可以通过 fiddler、wireshark 等工具进行抓包&#xff0c;那么&#xff0c;运行在容器的应用一般通过什么方式进行抓包呢&#xff1f;容器应用一般可以通过 tcpdump、ngrep …

服务发现与健康监测框架Consul-DNS转发的应用

关于Consul Consul是一个提供服务注册与发现&#xff0c;健康监测&#xff0c;Key/Value存储以及多数据中心存储的分布式框架。官网地址是https://www.consul.io/&#xff0c;公司初步应用后我们老大觉得这东西有点意思&#xff0c;随即有了翻译文档的想法&#xff0c;由于精力…

【ArcGIS风暴】ArcGIS10.6图斑椭球面积计算原理与方法

文章目录 1. 椭球面积计算原理2. ArcGIS计算图斑椭球面积3. ArcGIS计算图斑投影平面面积1. 椭球面积计算原理 <

实践 Neutron 前的两个准备工作 - 每天5分钟玩转 OpenStack(78)

上一节配置了 linux-bridge mechanism driver&#xff0c;本节再做两个准备工作&#xff1a; 1. 检视初始的网络状态。2. 了解 linux bridge 环境中的各种网络设备。 初始网络状态 我们首先考察实验环境最初始的网络状态。随着学习的深入&#xff0c;我们会对网络不断进行新的配…

《iVX 高仿美团APP制作移动端完整项目》04 美食页 标题、搜索、商家标题制作

点击整个专栏查看其它系列文章 &#xff08;系列文章更新中…&#xff09;&#xff1a;《iVX 高仿美团APP制作移动端完整项目》 项目界面预览&#xff1a; 一、美食页顶部商家页制作 1.1 页面主格调确认 该美食页为首页中美食按钮点击后进入的页面。该页面分为顶部的标题、搜…

利用浏览器调试功能 计算 百度网盘 文件数量

“百度网盘”程序做的比较烂&#xff0c;以百度的技术实力按说不应该如此。真正试了就知道真的不怎么样。为了统计百度网盘的文件写了以下脚本&#xff0c;仅供参考&#xff1a; var root "";//指定目录&#xff0c;空取当前目录 var totalCount 0; var startTime …

C语言试题十三之求出1到100之内能被7或者11整除,但不能同时被7和11整除的所有整书,并将他们放在a所指的数组中,通过n返回这些数的个数。

📃个人主页:个人主页 🔥系列专栏:C语言试题200例目录 💬推荐一款刷算法、笔试、面经、拿大公司offer神器 👉 点击跳转进入网站 ✅作者简介:大家好,我是码莎拉蒂,CSDN博客专家(全站排名Top 50),阿里云博客专家、51CTO博客专家、华为云享专家 1、 题目 求出1到1…

函数模板

1.函数模板的由来和概念&#xff1a;函数的重载可以实现一个函数名多用&#xff0c;将实现相同的或类似功能的函数用一个函数名来定义。这样编程者在调用同类函数时感到含义清晰&#xff0c;方法简单。但在程序中仍然要分别定义每一个函数&#xff0c;例如求三个数的最大值的函…

就在刚刚,HTTP/3 正式发布了!

经过了多年的努力&#xff0c;在 6 月 6 号&#xff0c;IETF &#xff08;互联网工程任务小组&#xff09; 正式发布了 HTTP/3 的 RFC&#xff0c; 这是超文本传输协议&#xff08;HTTP&#xff09;的第三个主要版本&#xff0c;完整的 RFC 超过了 20000 字&#xff0c;非常详细…

C语言试题十四之使字符串的前导*号不得多于n个;若多于n个,则删除多于的*号;若少于或等于n个,则什么也不做。字符串中间和尾部的*号不删除。

📃个人主页:个人主页 🔥系列专栏:C语言试题200例目录 💬推荐一款刷算法、笔试、面经、拿大公司offer神器 👉 点击跳转进入网站 ✅作者简介:大家好,我是码莎拉蒂,CSDN博客专家(全站排名Top 50),阿里云博客专家、51CTO博客专家、华为云享专家 1、题目 请编写函数…

通渭县义岗川镇之行(2020年11月19日)

2020年11月18日&#xff0c;应邀前往通渭县义岗川镇老家&#xff0c;经过了3个小时的自驾车程&#xff0c;夜幕降临时刻到达了美丽的义岗川小镇。 义岗川镇&#xff0c;隶属甘肃省定西市通渭县&#xff0c;地处通渭县城最北部&#xff0c;东南与寺子川乡毗连&#xff0c;南邻北…

python基础===PEP网站,代码规范指南

PEP 8是最古老的PEP之一&#xff0c;它向Python程序员提供了代码格式设置指南。PEP 8的篇幅很长&#xff0c;但大都与复杂的编码结构相关。 https://python.org/dev/peps/pep-0008/转载于:https://www.cnblogs.com/botoo/p/7830980.html

《iVX 高仿美团APP制作移动端完整项目》05 美食页商家推荐内容、分类、推荐商家制作

这一节我们将讲解美食页下半部分内容制作&#xff1a; 一、完善店铺推荐 接下来继续制作以下内容&#xff1a; 1.1 满减信息 现在咱们在对应的商家行中添加一个行&#xff0c;命名为满减&#xff0c;并且对应的更改高度为包裹&#xff1a; 随后更改其背景色、字体颜色使…

利用浏览器调试功能 计算 百度网盘 文件数量 V2

最近需要统计百度网盘里文件的数量&#xff0c;百度网盘又没有提供这样的功能&#xff0c;因此之前自己写了段脚本进行查验&#xff0c;见《利用浏览器调试功能 计算 百度网盘》。之后发现每个目录最多文件数只有1000&#xff0c;因此研究了哈百度的接口&#xff0c;重新对脚本…