Http Status 304响应状态的资源更新机制
2019獨(dú)角獸企業(yè)重金招聘Python工程師標(biāo)準(zhǔn)>>>
http請(qǐng)求頭和響應(yīng)頭可以避免重復(fù)的資源(css,js,圖片,文本等),瀏覽器一般訪問(wèn)這些靜態(tài)資源之后會(huì)緩存一段時(shí)間,靜態(tài)資源一般是不會(huì)經(jīng)常改變的,而且這些資源比較大,比較多的情況會(huì)影響加載效果,所以要避免多次從網(wǎng)絡(luò)加載這些文件。
一個(gè)完整的請(qǐng)求(本文作于2014-11-12,但資源時(shí)間是2014-10-30)
GET?/assets/github-208780c72d87b50a0c3b932094adabe0ed787e29f3a60ddf60b7a8c0b66aeaff.css?HTTP/1.1 Host:?assets-cdn.github.com Connection:?keep-alive Cache-Control:?max-age=0 Accept:?text/css,*/*;q=0.1 If-Modified-Since:?Thu,?30?Oct?2014?22:36:24?GMT User-Agent:?Mozilla/5.0?(Windows?NT?6.1;?WOW64)?AppleWebKit/537.36?(KHTML,?like?Gecko)?Chrome/37.0.2062.124?Safari/537.36 Referer:?https://github.com/ Accept-Encoding:?gzip,deflate Accept-Language:?en-US,en;q=0.8 Cookie:?logged_in=no;?_octo=GH1.1.1132014134.1407914921;?_ga=GA1.2.249759956.1407914919服務(wù)器響應(yīng)
HTTP/1.1?304?Not?Modified Date:?Sun,?02?Nov?2014?01:59:39?GMT Server:?Apache Via:?1.1?varnish Last-Modified:?Thu,?30?Oct?2014?22:36:24?GMT Cache-Control:?max-age=31536000,?public Expires:?Sat,?31?Oct?2015?20:46:08?GMT Age:?105210瀏覽器資源訪問(wèn)過(guò)程:
1.當(dāng)訪問(wèn)靜態(tài)資源文件時(shí),首先使用url hashcode作為key查詢(xún)本地資源緩存。
2.如果沒(méi)找到資源,那么直接訪問(wèn)瀏覽器,然后將請(qǐng)求的資源文件緩存并載入到html中。
3.如果找到資源,讀該資源在服務(wù)器創(chuàng)建的的時(shí)間,加入http響應(yīng)頭If-Modified-Since: Thu, 30 Oct 2014 22:36:24 GMT,并發(fā)送到服務(wù)器。
4.服務(wù)器根據(jù)url進(jìn)行查找資源,如果未找到,返回404。否則讀取資源創(chuàng)建時(shí)間,給出響應(yīng)狀態(tài)嗎。
5.瀏覽器如果收到404,會(huì)清空hascode對(duì)應(yīng)的緩存,資源無(wú)法加載到html
6.瀏覽器如果收到 304,檢查Last-Modified:Thu, 30 Oct 2014 22:36:24 GMT,如果(Last-Modified=If-Modified-Since),表示文件未被修改,則直接使用本地緩存加載到html.
7.比較之后,如果服務(wù)器>瀏覽器,則重新請(qǐng)求資源。
8.如果是200,則進(jìn)行本地緩存更新 ?Last-Modified>If-Modified-Since,并加載到html。
這個(gè)過(guò)程看似復(fù)雜,但提高了資源的訪問(wèn)效率
額外淺談一下驗(yàn)證碼問(wèn)題。
驗(yàn)證碼刷新問(wèn)題也是這個(gè)原理,一般來(lái)說(shuō)驗(yàn)證碼生成之后會(huì)緩存到服務(wù)上,他的創(chuàng)建時(shí)間和瀏覽器讀取到的創(chuàng)建時(shí)間進(jìn)行比較后,往往不在請(qǐng)求服務(wù)器。
驗(yàn)證碼更新問(wèn)題的結(jié)局,因?yàn)闊o(wú)法設(shè)置If-Modified-Since,但可以修改url,當(dāng)url不行同時(shí)hashcode是找不到資源的,他會(huì)再次請(qǐng)求的,比如我們使用js,可以這樣改變驗(yàn)證碼的url,?
var?url=http://hostname:[port]/xxx/checkcode.php?rnd=Math.random(); img.src=url?。轉(zhuǎn)載于:https://my.oschina.net/ososchina/blog/339896
《新程序員》:云原生和全面數(shù)字化實(shí)踐50位技術(shù)專(zhuān)家共同創(chuàng)作,文字、視頻、音頻交互閱讀總結(jié)
以上是生活随笔為你收集整理的Http Status 304响应状态的资源更新机制的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 【设计模式】—— 外观模式Facade
- 下一篇: 同时tar解压多个文件