日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

http304状态码缓存设置问题

發(fā)布時間:2023/12/9 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 http304状态码缓存设置问题 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
當瀏覽器第一次加載資源的時候,返回一般為200,意思是成功獲取資源,并會在瀏覽器的緩存中記錄下max-age,第二次訪問的時候:
如果只是用瀏覽器打開,那么瀏覽器會去判斷這個資源在緩存里有沒有,如果有的話,會去判斷max-age,看看過期沒有,如果沒有過期,則直接讀緩存,根本不會和服務(wù)器進行交互,換句話說,斷網(wǎng)都能打開,就和本地跑一樣!如果已經(jīng)過期了,那就去服務(wù)器請求,等待服務(wù)器響應(yīng),這是很費時間的,服務(wù)器如果發(fā)現(xiàn)資源沒有改變過,那么就會返回304,告訴瀏覽器,我沒變過,你去讀緩存吧,于是瀏覽器也不用從服務(wù)器拉數(shù)據(jù)了,然而,等待服務(wù)器響應(yīng)也是一個很要命的問題,在網(wǎng)速發(fā)達的今天,等一個響應(yīng),有時比下載還慢。 如果是用瀏覽器刷新的,那么瀏覽器不會去判斷max-age了,直接去服務(wù)器拿,如果服務(wù)器判斷資源沒變過,則還是會返回304,和上面是一樣的,所以刷新一下,其實很可怕,等于把所有的資源都要去服務(wù)器請求一邊,問問服務(wù)器我過期了沒有。
綜上,盡量減少網(wǎng)頁的資源數(shù)量!盡量合并JS CSS 圖片!響應(yīng)速度將會猛增!

3xx?(重定向)?
要完成請求,需要進一步操作。通常,這些狀態(tài)碼用來重定向。Google 建議您在每次請求中使用重定向不要超過 5 次。您可以使用網(wǎng)站管理員工具查看一下 Googlebot 在抓取重定向網(wǎng)頁時是否遇到問題。診斷下的網(wǎng)絡(luò)抓取頁列出了由于重定向錯誤導(dǎo)致 Googlebot 無法抓取的網(wǎng)址。

300(多種選擇)針對請求,服務(wù)器可執(zhí)行多種操作。服務(wù)器可根據(jù)請求者 (user agent) 選擇一項操作,或提供操作列表供請求者選擇。
301(永久移動)請求的網(wǎng)頁已永久移動到新位置。服務(wù)器返回此響應(yīng)(對 GET 或 HEAD 請求的響應(yīng))時,會自動將請求者轉(zhuǎn)到新位置。您應(yīng)使用此代碼告訴 Googlebot 某個網(wǎng)頁或網(wǎng)站已永久移動到新位置。
302(臨時移動)服務(wù)器目前從不同位置的網(wǎng)頁響應(yīng)請求,但請求者應(yīng)繼續(xù)使用原有位置來響應(yīng)以后的請求。此代碼與響應(yīng) GET 和 HEAD 請求的 301 代碼類似,會自動將請求者轉(zhuǎn)到不同的位置,但您不應(yīng)使用此代碼來告訴 Googlebot 某個網(wǎng)頁或網(wǎng)站已經(jīng)移動,因為 Googlebot 會繼續(xù)抓取原有位置并編制索引。
303(查看其他位置)請求者應(yīng)當對不同的位置使用單獨的 GET 請求來檢索響應(yīng)時,服務(wù)器返回此代碼。對于除 HEAD 之外的所有請求,服務(wù)器會自動轉(zhuǎn)到其他位置。
304(未修改)

自從上次請求后,請求的網(wǎng)頁未修改過。服務(wù)器返回此響應(yīng)時,不會返回網(wǎng)頁內(nèi)容。

如果網(wǎng)頁自請求者上次請求后再也沒有更改過,您應(yīng)將服務(wù)器配置為返回此響應(yīng)(稱為 If-Modified-Since HTTP 標頭)。服務(wù)器可以告訴 Googlebot 自從上次抓取后網(wǎng)頁沒有變更,進而節(jié)省帶寬和開銷。

.
305(使用代理)請求者只能使用代理訪問請求的網(wǎng)頁。如果服務(wù)器返回此響應(yīng),還表示請求者應(yīng)使用代理。
307(臨時重定向)服務(wù)器目前從不同位置的網(wǎng)頁響應(yīng)請求,但請求者應(yīng)繼續(xù)使用原有位置來響應(yīng)以后的請求。此代碼與響應(yīng) GET 和 HEAD 請求的 <a href=answer.py?answer=>301</a> 代碼類似,會自動將請求者轉(zhuǎn)到不同的位置,但您不應(yīng)使用此代碼來告訴 Googlebot 某個頁面或網(wǎng)站已經(jīng)移動,因為 Googlebot 會繼續(xù)抓取原有位置并編制索引。
打算將cache-control的各個值都試一遍,看看最終效果是否和預(yù)期一致。?
?? 先嘗試max-age。其作用是:假如請求了服務(wù)器并在a時刻返回響應(yīng)結(jié)果,則在max-age規(guī)定的秒數(shù)內(nèi),瀏覽器將不會發(fā)送對應(yīng)的請求到服務(wù)器,數(shù)據(jù)由緩存直接返回;超過這一時間段才進一步由服務(wù)器決定是返回新數(shù)據(jù)還是仍由緩存提供。?
?? 設(shè)置max-age的方式是tomcat的filter。?
Java代碼??
  • package?itims;??
  • public?class?TestHTTP?implements?Filter{??
  • ????private?static?transient?Log?logger?=?LogFactory.getLog(TestHTTP.class);???
  • ????@Override??
  • ????public?void?destroy()?{??
  • ??????????
  • ????}??
  • ??
  • ????@Override??
  • ????public?void?doFilter(ServletRequest?servletrequest,??
  • ????????????ServletResponse?servletresponse,?FilterChain?filterchain)??
  • ????????????throws?IOException,?ServletException?{??
  • ????????filterchain.doFilter(servletrequest,?servletresponse);??
  • ????????if?(servletrequest?instanceof?HttpServletRequest?&&?servletresponse?instanceof?HttpServletResponse)?{????
  • ????????????HttpServletRequest?request?=?(HttpServletRequest)?servletrequest;????
  • ????????????HttpServletResponse?response?=?(HttpServletResponse)?servletresponse;????
  • ?????????????logger.info("request.getRequestURI:"+request.getRequestURI());??
  • ????????????????response.setHeader("Cache-Control",?"max-age="?+?cacheTime);????
  • ????????}??
  • ????}??
  • ????@Override??
  • ?????public?void?init(FilterConfig?arg0)?throws?ServletException?{?????
  • ?????????}???
  • }??

  • web.xml,只針對js和css文件進行設(shè)置。?
    Xml代碼??
  • <filter>??
  • ?????<filter-name>cache-filter</filter-name>??
  • ?????<filter-class>itims.TestHTTP</filter-class>??
  • ?????<init-param>??
  • ???????????<param-name>cache-time</param-name>??
  • ???????????<param-value>30</param-value>??
  • ????????</init-param>??
  • </filter>??
  • ??
  • <filter-mapping>??
  • ???????<filter-name>cache-filter</filter-name>??
  • ???????<url-pattern>*.js</url-pattern>??
  • ???</filter-mapping>??
  • ?????
  • ???<filter-mapping>??
  • ???????<filter-name>cache-filter</filter-name>??
  • ???????<url-pattern>*.css</url-pattern>??
  • </filter-mapping>??

  • httpTest.jsp?
    Html代碼??
  • <%@?page?language="java"?contentType="text/html;?charset=ISO-8859-1"??
  • ????pageEncoding="ISO-8859-1"%>??
  • <!DOCTYPE?html?PUBLIC?"-//W3C//DTD?HTML?4.01?Transitional//EN"?"http://www.w3.org/TR/html4/loose.dtd">??
  • <%??
  • ????String?path?=?(String)?request.getContextPath();??
  • %>??
  • <html>??
  • ????<head>??
  • ????????<!--???
  • ????????<meta?http-equiv="refresh"?content="5;url=http://localhost:8088/itims/testRRD.action">?
  • ????????-->??
  • ????????<meta?http-equiv="Content-Type"?content="text/html;?charset=ISO-8859-1"?/>??
  • ????????<script?type="text/javascript"?src="<%=path%>/widget/jquery/jquery-1.3.2.min.js"></script>??
  • ????????<title>httpTest</title>??
  • ????</head>??
  • ????<body>??
  • ????????<p>??
  • ????????????success!??
  • ????????</p>??
  • ????</body>??
  • </html>??

  • 在瀏覽器內(nèi)輸入httpTest.jsp,則抓取的請求/響應(yīng)信息如下:?
    Java代碼??
  • http://localhost:8088/itims/widget/jquery/jquery-1.3.2.min.js??
  • ??
  • GET?/itims/widget/jquery/jquery-1.3.2.min.js?HTTP/1.1??
  • Host:?localhost:8088??
  • User-Agent:?Mozilla/5.0?(Windows?NT?5.1;?rv:6.0)?Gecko/20100101?Firefox/6.0??
  • Accept:?*/*??
  • Accept-Language:?zh-cn,zh;q=0.5??
  • Accept-Encoding:?gzip,?deflate??
  • Accept-Charset:?GB2312,utf-8;q=0.7,*;q=0.7??
  • Connection:?keep-alive??
  • Referer:?http://localhost:8088/itims/springTest.jsp??
  • Cookie:?JSESSIONID=4B83B20F13BBCD37D1C0FB406807FA75??
  • If-Modified-Since:?Sun,?28?Aug?2011?13:06:44?GMT??
  • If-None-Match:?W/"57254-1314536804640"??
  • ??
  • HTTP/1.1?304?Not?Modified??
  • Server:?Apache-Coyote/1.1??
  • Etag:?W/"57254-1314536804640"??
  • Cache-Control:?max-age=30??
  • Date:?Sun,?28?Aug?2011?13:19:35?GMT??

  • jquery-1.3.2.min.js的max-age被設(shè)置為30秒。即30秒內(nèi),無論用戶在瀏覽器地址欄上敲多少次回車,后臺也不應(yīng)該打印日志,而我這個信息抓取工具也不應(yīng)該抓取到任何信息。事實的確如此。注意,不同的操作方式影響最終結(jié)果,原因是刷新和強制刷新會額外發(fā)送cache-control信息。?
    f5或刷新按鈕:cache-control:max-age=0?
    ctrl+f5:cache-control:no-cache?
    ??????? pragma:no-cache?
    疑難雜癥:?
    1、為什么把緩存清干凈并訪問頁面后,再次通過按回車訪問頁面時,瀏覽器卻不再發(fā)送請求了,而按f5又可以??
    ?? 答:觀察響應(yīng)信息可知,把緩存清干凈后cache-control的設(shè)置消失了,原因不明。如果按回車,則此時緩存永遠都起作用,自然不用訪問服務(wù)器;而按f5則是強制訪問,且此時cache-control的設(shè)置又能出現(xiàn),所以之后所有的訪問都遵循cache-control的設(shè)置。

    轉(zhuǎn)載于:https://www.cnblogs.com/panxuejun/p/5842069.html

    總結(jié)

    以上是生活随笔為你收集整理的http304状态码缓存设置问题的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。