現代的商業化**快取相當的複雜。這些快取構建的非常高效,可以支援http和其他一些技術的各種高階特性。但除了一些微妙的細節之外,web快取的基本工作原理大多很簡單。對一條http get報文的基本快取處理過程包括7個步驟:
接收——快取從網路中讀取抵達的請求報文
解析——快取對報文進行解析,提取url和各種首部
查詢——快取檢視是否有本地副本可用,如果沒有,就獲取乙份副本(將其儲存在本地)
新鮮度檢測——快取檢視已快取的副本是否足夠新鮮,如果不是,就詢問伺服器是否有任何更新
建立響應——快取會用新的首部和已快取的主體來構建一條響應報文
傳送——快取通過網路將響應發回給客戶端
日誌——快取可選的建立乙個日誌檔案條目來描述這個事務
快取檢測到一條網路連線上的活動,讀取輸入資料。高效能的快取會同時從多條輸入連線上讀取資料,在整條報文抵達之前開始對事務進行處理。
快取將報文解析為片段,將首部的各個部分放入易於操作的資料結構中。這樣快取軟體就更容易處理首部欄位並修改他們了。
解析程式還要負責首部各部分的標準化,將大小寫或者可替換資料格式之類不太重要的區別都看成等效的。
快取獲取url後,查詢本地副本。本地副本可能儲存在記憶體,本地磁碟,甚至附近的另一台伺服器中。專業級的快取會使用快速演算法來確定本地快取中是否有某個物件。如果本地沒有這個文件,他可以根據情形和配置,到原始伺服器或父**中去取,或者返回一條錯誤資訊。
已快取的物件中包含了伺服器響應主體和原始伺服器響應首部,這樣就會在快取命中時返回正確的伺服器首部。已快取的物件中還包含一些元資料(metadata),用來記錄物件在快取中停留了多長時間,以及它被用過多少次等。
http通過快取將伺服器文件的副本保留一段時間。在這段時間裡,都認為文件是」新鮮的」, 快取可以在不聯絡伺服器的情況下,直接提取該文件。但一旦已快取副本停留的時間太長,超過了文件的新鮮度限值(freshness limit),就認為物件」過時」了,在提供該文件之前,快取要再次與伺服器進行確認,以檢視文件是否發生了變化。客戶端傳送給快取的所有請求首部自身都可以強制快取進行再驗證,或者完全避免驗證,這使得事情變得更加的複雜。
http有一組非常複雜的新鮮度檢測規則,快取產品支援的大量配置選項,以及與非http新鮮度標準進行互通的需要則使得問題變得更加嚴重。
http有一些簡單的機制可以在不要求伺服器記住有哪些快取擁有其文件副本的情況下,保持已快取資料與伺服器資料之間充分一致。http將這些簡單的機制稱為文件過期和伺服器再認證。
通過特殊的http cache-control首部(http/1.0+)和expires首部(cache-control),http讓原始伺服器向每個文件附加了乙個」過期時間」。在快取檔案過期之前,快取可以以任意頻率使用這些副本,而無需與伺服器聯絡。
過期響應首部: 首部
描述cache-control: max-age
max-age值定義了文件的最大使用期——從第一次生成文件
到文件不再新鮮、無法使用為止,最大的合法生存時間。
cache-control: max-age=484200
expires
指定乙個絕對的過期日期。如果過期日期已經過了,就說明
文件不再新鮮了
expires: fri, 05 jul 2016, 05:00:00 gmt
由於cache-control首部使用的是相對時間而不是絕對時間,所以我們更傾向於使用比較新的cache-control首部。絕對時間依賴於計算機時鐘的正確設定。
僅僅是已快取文件過期了並不意味著它與原始伺服器上目前處於活躍狀態的文件有實際的區別,這只是意味著到了要進行核對的時間了。這種情況被稱為」伺服器再驗證」,說明快取需要詢問原始伺服器文件是否發生了變化。
http的條件方法可以高效地實現再驗證。http允許快取向原始伺服器乙個」條件get」, 請求伺服器只有在文件和快取中現有的副本不同時,才回送物件主體。通過這種方式,將新鮮度檢測和物件獲取結合成了單個條件get。向get請求報文中新增一些特殊的條件首部,就可以發起條件get。
快取再驗證中使用的兩個條件首部: 首部
描述if-modified-since:
如果從指定日期之後文件被修改過了,就執行請求的方法
。可以與last-modified伺服器響應首部配合使用,只有
在內容被修改後與已快取版本有所不同的時候才去獲取內容
if-none-match:
伺服器可以為文件提供特殊的標籤(etag),而不是將其與
最近修改日期相匹配,這些標籤就像序列號一樣。如果已
快取標籤與伺服器文件中的標籤有所不同,
if-none-match首部就會執行所請求的方法
1. if-modified-since: date 再驗證(ims請求)
2. if-none-match : 實體標籤再認證
有些情況下僅使用最後修改時間進行再驗證是不夠的。為了解決這些問題,http允許使用者對被稱為實體標籤(etag)的」版本識別符號」進行比較。實體標籤是附加到文件上的任意標籤(引用字串)。它們可能包含了文件的序列號或版本號,或者是文件內容的檢驗和及其它指紋資訊。
當發布者對文件進行修改時,可以修改文件的實體標籤來說明這個新的版本。這樣,如果實體標籤被修改了,快取就可以用if-none-match條件來get文件的新副本了。
我們希望快取的響應看起來就像來自原始伺服器的一樣,快取將已快取的伺服器響應首部作為響應首部的起點。然後快取對這些基礎首部進行了修改和擴充。
快取負責對這些首部進行改造,以便與客戶端的要求相匹配。注意,快取不應該調整date首部。date首部表示的是原始伺服器最初產生這個物件的時間。
一旦響應首部準備好了,快取就將響應回送給客戶端。和所有**伺服器一樣,**快取要管理與客戶端之間的連線。高效能的快取會盡全力高效的傳送資料,通常可以避免在本地快取與網路i/o緩衝區之間進行文件內容的複製。
大多數快取都會儲存日誌檔案以及與快取使用的一些統計資料。每個快取事務結束之後,快取都會更新快取命中和未命中數目的統計資料(以及相關的度量值),並將條目插入乙個用來顯示請求型別、url和所發生事件的日誌檔案。
下圖以簡化形式展示了快取是如何處理請求以獲取乙個方法為get的url的。
Web工作原理
web系統的組成部分 頁面 超文字文件在使用者端顯示為頁面 page 瀏覽器 頁面通過乙個稱作瀏覽器 browser 的程式 目前最流行的瀏覽器是 netscape 網 絡資訊瀏覽器 internet explore。主頁 homepage 是首頁,整個檔案的起始點和彙總點。標識頁面的方法是採用 統...
web工作原理
web的工作原理 基於b s模型 1 客戶端發出請求 訪問url 申請與對應伺服器進行資料請求 通過http https協議 基於tcp所以需要知道目標ip位址 2 由dns進行網域名稱解析,找到伺服器的ip位址,向該位址指向的web伺服器發出請求。3 web伺服器根據請求將url位址轉換為頁面所在...
快取的工作原理
1.快取的工作流程 快取主要針對select查村語句作用的 1 第一次查詢將資料寫入快取 2 第二次查詢時,先看快取中是否有,有,提取。3 期間針對此快取的任何insert update delet操作,都觸發將快取清空。以mybatis的二級快取為例,快取流程都一樣,不論一級快取,還是二級快取,抑...