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

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

http304状态码缓存设置问题

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

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

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

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

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

.
305(使用代理)請(qǐng)求者只能使用代理訪問(wèn)請(qǐng)求的網(wǎng)頁(yè)。如果服務(wù)器返回此響應(yīng),還表示請(qǐng)求者應(yīng)使用代理。
307(臨時(shí)重定向)服務(wù)器目前從不同位置的網(wǎng)頁(yè)響應(yīng)請(qǐng)求,但請(qǐng)求者應(yīng)繼續(xù)使用原有位置來(lái)響應(yīng)以后的請(qǐng)求。此代碼與響應(yīng) GET 和 HEAD 請(qǐng)求的 <a href=answer.py?answer=>301</a> 代碼類似,會(huì)自動(dòng)將請(qǐng)求者轉(zhuǎn)到不同的位置,但您不應(yīng)使用此代碼來(lái)告訴 Googlebot 某個(gè)頁(yè)面或網(wǎng)站已經(jīng)移動(dòng),因?yàn)?Googlebot 會(huì)繼續(xù)抓取原有位置并編制索引。
打算將cache-control的各個(gè)值都試一遍,看看最終效果是否和預(yù)期一致。?
?? 先嘗試max-age。其作用是:假如請(qǐng)求了服務(wù)器并在a時(shí)刻返回響應(yīng)結(jié)果,則在max-age規(guī)定的秒數(shù)內(nèi),瀏覽器將不會(huì)發(fā)送對(duì)應(yīng)的請(qǐng)求到服務(wù)器,數(shù)據(jù)由緩存直接返回;超過(guò)這一時(shí)間段才進(jìn)一步由服務(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,只針對(duì)js和css文件進(jìn)行設(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,則抓取的請(qǐng)求/響應(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),無(wú)論用戶在瀏覽器地址欄上敲多少次回車,后臺(tái)也不應(yīng)該打印日志,而我這個(gè)信息抓取工具也不應(yīng)該抓取到任何信息。事實(shí)的確如此。注意,不同的操作方式影響最終結(jié)果,原因是刷新和強(qiáng)制刷新會(huì)額外發(fā)送cache-control信息。?
    f5或刷新按鈕:cache-control:max-age=0?
    ctrl+f5:cache-control:no-cache?
    ??????? pragma:no-cache?
    疑難雜癥:?
    1、為什么把緩存清干凈并訪問(wèn)頁(yè)面后,再次通過(guò)按回車訪問(wèn)頁(yè)面時(shí),瀏覽器卻不再發(fā)送請(qǐng)求了,而按f5又可以??
    ?? 答:觀察響應(yīng)信息可知,把緩存清干凈后cache-control的設(shè)置消失了,原因不明。如果按回車,則此時(shí)緩存永遠(yuǎn)都起作用,自然不用訪問(wèn)服務(wù)器;而按f5則是強(qiáng)制訪問(wèn),且此時(shí)cache-control的設(shè)置又能出現(xiàn),所以之后所有的訪問(wèn)都遵循cache-control的設(shè)置。

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

    總結(jié)

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

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