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.pswp.cn/news/286368.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/286368.shtml
英文地址,請注明出處:http://en.pswp.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;重新對腳本…