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