學(xué)nginx的時(shí)候把瀏覽器的緩存機(jī)制琢磨了一下。把相關(guān)http header研究了一下。
然后突然想起一個(gè)問(wèn)題,就是以前在本地開(kāi)發(fā)的過(guò)程中修改js文件時(shí)由于瀏覽器緩存導(dǎo)致新的改動(dòng)并沒(méi)有生效,必須清空才可以。
然后就想結(jié)合剛了解的http緩存機(jī)制來(lái)弄清楚以前那個(gè)js文件不生效的問(wèn)題。
可是問(wèn)題來(lái)了。為什么js文件在修改之后,刷新頁(yè)面,瀏覽器沒(méi)有從本地服務(wù)器獲取新的js文件而是從緩存中讀取。
我確認(rèn)了request header 里的cache-control是 max-age=0,就是說(shuō)向服務(wù)器確認(rèn)該js文件是否需要更新。
那有改動(dòng)的話應(yīng)該是重新請(qǐng)求js文件 且status為200才對(duì)呃。。。。
還是說(shuō)只要js文件的名字沒(méi)變。那么瀏覽器就認(rèn)為緩存是存在的,可以直接讀????并不需要判斷etag或者last-modified
request header的cache-control: max-age=0
只有在CTRL + F5
強(qiáng)刷時(shí)才會(huì)加入
正常訪問(wèn)并不會(huì)加這種頭
你要控制瀏覽器的行為,應(yīng)該在服務(wù)端的cache-control
里配置
不能脫離服務(wù)端的cache-control
討論瀏覽器的緩存機(jī)制
request header是給服務(wù)器看的,不是給瀏覽器看的,你的理解本身就不對(duì)
服務(wù)端通過(guò)cache-control、etag、last-modified告訴瀏覽器和緩存服務(wù)器應(yīng)該怎么存儲(chǔ)和處理這個(gè)URL
如果符合一定規(guī)則(具體看下方文章),瀏覽器并不會(huì)向服務(wù)器發(fā)出請(qǐng)求,而是直接使用本地緩存
如果符合一定規(guī)則需要向服務(wù)器發(fā)出請(qǐng)求,瀏覽器通過(guò)If-Modified-Since
If-None-Match
cache-control
告訴服務(wù)器應(yīng)該響應(yīng)304還是200
這篇文章已經(jīng)講得很清楚了:
https://developers.google.com...
你自己一堆概念都沒(méi)有搞清楚。
可是問(wèn)題來(lái)了。為什么js文件在修改之后,刷新頁(yè)面,瀏覽器沒(méi)有從本地服務(wù)器獲取新的js文件而是從緩存中讀取。
首先,瀏覽器不知道你的 js 文件到底有沒(méi)有改。瀏覽器如果沒(méi)有發(fā)出遠(yuǎn)端請(qǐng)求,那么一定是“緩存頭”機(jī)制在發(fā)生作用。(前提是瀏覽器自己正確實(shí)現(xiàn)了 HTTP 協(xié)議的相關(guān)要求)
我確認(rèn)了request header 里的cache-control是 max-age=0,就是說(shuō)向服務(wù)器確認(rèn)該js文件是否需要更新。
那有改動(dòng)的話應(yīng)該是重新請(qǐng)求js文件 且status為200才對(duì)呃。。。。
這是你服務(wù)器的事,不是瀏覽器這個(gè)客戶端的事。
還是說(shuō)只要js文件的名字沒(méi)變。那么瀏覽器就認(rèn)為緩存是存在的,可以直接讀????并不需要判斷etag或者last-modified
文件名沒(méi)有變,緩存策略受“頭”控制。
文件名變了,一定不會(huì)有緩存,因?yàn)闉g覽器標(biāo)識(shí)資源是依賴 URI 的,文件名(準(zhǔn)備說(shuō)是是 URL 中的 path)是這個(gè) URI 的一部分。
北大青鳥APTECH成立于1999年。依托北京大學(xué)優(yōu)質(zhì)雄厚的教育資源和背景,秉承“教育改變生活”的發(fā)展理念,致力于培養(yǎng)中國(guó)IT技能型緊缺人才,是大數(shù)據(jù)專業(yè)的國(guó)家
北大青鳥中博軟件學(xué)院創(chuàng)立于2003年,作為華東區(qū)著名互聯(lián)網(wǎng)學(xué)院和江蘇省首批服務(wù)外包人才培訓(xùn)基地,中博成功培育了近30000名軟件工程師走向高薪崗位,合作企業(yè)超4
中公教育集團(tuán)創(chuàng)建于1999年,經(jīng)過(guò)二十年潛心發(fā)展,已由一家北大畢業(yè)生自主創(chuàng)業(yè)的信息技術(shù)與教育服務(wù)機(jī)構(gòu),發(fā)展為教育服務(wù)業(yè)的綜合性企業(yè)集團(tuán),成為集合面授教學(xué)培訓(xùn)、網(wǎng)
達(dá)內(nèi)教育集團(tuán)成立于2002年,是一家由留學(xué)海歸創(chuàng)辦的高端職業(yè)教育培訓(xùn)機(jī)構(gòu),是中國(guó)一站式人才培養(yǎng)平臺(tái)、一站式人才輸送平臺(tái)。2014年4月3日在美國(guó)成功上市,融資1
曾工作于聯(lián)想擔(dān)任系統(tǒng)開(kāi)發(fā)工程師,曾在博彥科技股份有限公司擔(dān)任項(xiàng)目經(jīng)理從事移動(dòng)互聯(lián)網(wǎng)管理及研發(fā)工作,曾創(chuàng)辦藍(lán)懿科技有限責(zé)任公司從事總經(jīng)理職務(wù)負(fù)責(zé)iOS教學(xué)及管理工作。
浪潮集團(tuán)項(xiàng)目經(jīng)理。精通Java與.NET 技術(shù), 熟練的跨平臺(tái)面向?qū)ο箝_(kāi)發(fā)經(jīng)驗(yàn),技術(shù)功底深厚。 授課風(fēng)格 授課風(fēng)格清新自然、條理清晰、主次分明、重點(diǎn)難點(diǎn)突出、引人入勝。
精通HTML5和CSS3;Javascript及主流js庫(kù),具有快速界面開(kāi)發(fā)的能力,對(duì)瀏覽器兼容性、前端性能優(yōu)化等有深入理解。精通網(wǎng)頁(yè)制作和網(wǎng)頁(yè)游戲開(kāi)發(fā)。
具有10 年的Java 企業(yè)應(yīng)用開(kāi)發(fā)經(jīng)驗(yàn)。曾經(jīng)歷任德國(guó)Software AG 技術(shù)顧問(wèn),美國(guó)Dachieve 系統(tǒng)架構(gòu)師,美國(guó)AngelEngineers Inc. 系統(tǒng)架構(gòu)師。