論,如何定義一個前端工程師。前天看了篇文章,做者把前端攻城獅稱做是全部攻城獅角色中最具備也最須要‘工匠精神’的攻城獅。從最直觀的角度來說就是視覺方面,不只要百分百還原設計稿(靜態以及動態交互),還要考慮代碼是否工整、冗餘、複用、性能等方面問題,並且說得更博大一些還要培養點產品和設計的思惟(培養個P啊,這是開發和他們的鴻溝,純屬扯淡。)正兒八經的對於前端不僅是會JavaScript就好了,要學的東西真是太多了,做爲一名初生牛犢的我,仍是至關有必要擴展下一個web開發要掌握的知識面,好比今天要總結的緩存機制。css
Web緩存是指一個Web資源(如html頁面,圖片,js等)存在於Web服務器和客戶端(瀏覽器)之間的副本。緩存會根據進來的請求保存輸出內容的副本;當下一個請求來到的時候,若是是相同的URL,緩存會根據緩存機制決定是直接使用副本響應訪問請求,仍是向源服務器再次發送請求。比較常見的就是瀏覽器會緩存訪問過網站的網頁,當再次訪問這個URL地址的時候,若是網頁沒有更新,就不會再次下載網頁,而是直接使用本地緩存的網頁。只有當網站明確標識資源已經更新,瀏覽器纔會再次下載網頁。html
本文要介紹的是瀏覽器緩存,其實就是指服務器和客戶端(瀏覽器)之間的一個副本(static sources like html/css/js)。一個完整的網絡請求大概是這樣的;
第一次請求: 客戶端發送請求 -> 本地無緩存 -> 向服務器發送請求 -> 返回靜態資源 -> 呈現(並緩存到本地)前端
第二次請求:以下圖一所示:web
這裏要先說下緩存中相關的消息報頭參數,具體如圖二(標紅處重點理解 ):數據庫
如今講圖一中發生的第二次請求,這次請求會讀取本地的緩存副本,但首先讀取的時候瀏覽器會判斷緩存的過時時間(假如設置的話),假若沒有過時就會讀取緩存。假若過時就會和服務器校對ETag
(Entity tag用於緩存驗證)若是ETag
非空,瀏覽器就會把ETag
的值給If-None-Match
進行對比,同時,也會對比Last-Modified
和If-Modified-Since
的值,若是相同則證實服務器沒有修改內容,就會返回304 Not-Modified
讀取本地緩存,HTTP304
狀態碼是指該本地緩存資源與服務端資源相比沒有被修改過因此會直接讀取本地緩存內容,反之從新向服務器發出請求並返回。此時Last-Modified
和ETag
的值都會被重置。segmentfault
以上所述都是本身總結的一些知識,若有錯誤還請指正,感謝。瀏覽器
- 感謝如下前輩的解惑,向大佬看齊【敬禮!】
- http://www.alloyteam.com/2012...
- https://segmentfault.com/a/11...