http協議經常使用功能整理之web緩存

本部份內容整理於互聯網
html

Web緩存:
WEB緩存(cache)位於Web服務器和客戶端之間。 緩存會根據請求保存輸出內容的副本,例如html頁面,圖片,文件,當下一個請求來到的時候:若是是相同的URL,緩存直接使用副本響應訪問請求,而不是向源服務器再次發送請求。 HTTP協議定義了相關的消息頭來使WEB緩存儘量好的工做。web

緩存的優勢:
減小相應延遲:由於請求從緩存服務器(離客戶端更近)而不是源服務器被相應,這個過程耗時更少,讓web服務器看上去相應更快。 減小網絡帶寬消耗:當副本被重用時會減低客戶端的帶寬消耗;客戶能夠節省帶寬費用,控制帶寬的需求的增加並更易於管理。緩存

緩存相關的HTTP擴展消息頭:服務器

Expires:指示響應內容過時的時間,格林威治時間GMT
Cache-Control:更細緻的控制緩存的內容
Last-Modified:響應中資源最後一次修改的時間
ETag:響應中資源的校驗值,在服務器上某個時段是惟一標識的。
Date:服務器的時間
If-Modified-Since:客戶端存取的該資源最後一次修改的時間,同Last-Modified。
If-None-Match:客戶端存取的該資源的檢驗值,同ETag。網絡

客戶端緩存生效的常見流程:
服務器收到請求時,會在200OK中回送該資源的Last-Modified和ETag頭,客戶端將該資源保存在cache中,並記錄這兩個屬性。當客戶端須要發送相同的請求時,會在請求中攜帶If-Modified-Since和If-None-Match兩個頭。兩個頭的值分別是響應中Last-Modified和ETag頭的值。服務器經過這兩個頭判斷本地資源未發生變化,客戶端不須要從新下載,返回304響應多線程

Web緩存機制:
HTTP/1.1中緩存的目的是爲了在不少狀況下減小發送請求,同時在許多狀況下能夠不須要發送完整響應。前者減小了網絡迴路的數量;HTTP利用一個「過時(expiration)」機制來爲此目的。後者減小了網絡應用的帶寬;HTTP用「驗證(validation)」機制來爲此目的。 HTTP定義了3種緩存機制: 1)Freshness:容許一個迴應消息能夠在源服務器不被從新檢查,而且能夠由服務器和客戶端來控制。例如,Expires迴應頭給了一個文檔不可用的時間。Cache-Control中的max-age標識指明瞭緩存的最長時間; 2)Validation:用來檢查以一個緩存的迴應是否仍然可用。例如,若是一個迴應有一個Last-Modified迴應頭,緩存可以使用If-Modified-Since來判斷是否已改變,以便判斷根據狀況發送請求; 3)Invalidation: 在另外一個請求經過緩存的時候,經常有一個反作用。例如,若是一個URL關聯到一個緩存迴應,可是其後跟着POST、PUT和DELETE的請求的話,緩存就會過時。併發

斷點續傳和多線程下載的實現原理:工具

HTTP協議的GET方法,支持只請求某個資源的某一部分;206 Partial Content 部份內容響應; Range 請求的資源範圍; Content-Range 響應的資源範圍; 在鏈接斷開重連時,客戶端只請求該資源未下載的部分,而不是從新請求整個資源,來實現斷點續傳。 分塊請求資源實例: Eg1:Range: bytes=306302- :請求這個資源從306302個字節到末尾的部分; Eg2:Content-Range: bytes 306302-604047/604048:響應中指示攜帶的是該資源的第306302-604047的字節,該資源共604048個字節; 客戶端經過併發的請求相同資源的不一樣片斷,來實現對某個資源的併發分塊下載。從而達到快速下載的目的。目前流行的FlashGet和迅雷基本都是這個原理。 多線程下載的原理:下載工具開啓多個發出HTTP請求的線程; 每一個http請求只請求資源文件的一部分:Content-Range: bytes 20000-40000/47000; 合併每一個線程下載的文件。線程

相關文章
相關標籤/搜索