最近一段時間一直在研究頁面緩存和壓縮方面的東西,因爲公司服務器使用的是iis6.0,不少性能方面的優化都不支持。因此,就開始嘗試着本身寫個簡單的處理程序。css
爲了減小服務器帶寬的需求,咱們要減小客戶端與服務器端交互的數據量。解決方法以下:
1. 緩存不多變化的靜態資源,好比JS,CSS和圖片。
2. 對網絡交互的數據進行壓縮,好比對JS,CSS,HTML,圖片等。
3. 減小客戶端與服務器端的交互次數,咱們能夠合併全部的JS文件,合併全部的CSS文件。
緩存位於服務器之間和客戶端之間,根據請求保存輸出內容的副本,如html頁面,圖片,文件,當下一個請求來到時,若是相同的URL,直接使用副本響應訪問請求,而不向源服務器再次發送請求。html
如下整理了一些Http請求頭相關的知識:node
緩存的類型
1. 瀏覽器緩存
瀏覽器都有關於緩存的設置。經過在電腦硬盤存儲已經看過的網站的副本。
2. 代理服務器緩存
Web代理服務器使用一樣的緩存原理,代理服務器羣爲成百上千用戶服務使用一樣的機制;代理服務器緩存是共享緩存,爲大量用戶使用,所以在減小相應時間和帶寬使用方面頗有效,同一個副本會被重用屢次。
3. 網關緩存
也稱爲反向代理緩存或間接代理緩存,網關緩存也是一箇中間服務器,和內網管理員部署緩存用於節省帶寬不一樣,網關緩存通常是網站管理 員本身部署,讓他們的網站更容易擴展並得到更好的性能。請求有幾種方法被路由到網關緩存服務器上,其中典型的是讓用一臺或多臺負載均衡服務器從客戶端看上 去是源服務器。
緩存如何工做
1. 若是響應頭信息:告訴緩存器不要保留緩存,緩存器就不會緩存相應內容。
2. 若是請求信息是須要認證或者安全加密的,相應內容默認不會被緩存。
3.若是在迴應中不存在校驗器(ETag或者Last-Modified頭信息),緩存服務器會認爲缺少直接的更新度信息,內容將會被認爲不可緩存。
4. 一個緩存的副本若是含有如下信息,內容將會被認爲是足夠新的。apache
5.若是緩存的副本已經太舊了,緩存服務器將向源服務器發出請求校驗請求,用於肯定是否能夠繼續使用當前拷貝繼續服務。
四種經常使用於控制客戶端緩存的頭標
1. Last-Modified 最後修改時間
這個頭標是一個響應頭標,表示客戶端(一般指瀏覽器)所請求資源在服務器端的最後修改時間,一般狀況下客戶端在接受這個頭標後,在之後對這個資源的請求會附 帶一個’If-Modified-Since’請求頭標,而這個頭標是想告訴服務器上次客戶端所請求資源的最後修改時間,對於一些圖像,css,js等靜 態文件資源,配置好了的apache服務器會理解這些If-Modified-Since請求頭標,將頭標裏的時間和文件的最後修改時間進行比較並做出響 應,若是兩者相等則發送一個304 Not Modfied來告訴客戶端所請求資源並未修改讓客戶端放心使用緩存中的資源,不然的話會從新發送一個新的資源和新的Last-Modified的頭標。
2. ETag(Entity Tag) 實體標籤
和Last-Modified相似,也是WEB服務器和客戶端用於確認緩存組件的有效性的一種 機制,apache 1.3和2.0的ETag格式是inode-size-timestamp,所以當資源被修改,其ETag也發生改變,ETag相對Last- Modified更精確,Last-Modified只能精確的s級別,可是ETag在多服務器可能形成混亂
3. Expires 過時時間
這個屬性告訴緩存器相關副本在多長時間內是新鮮的。過了這個時間,緩存器就會向源服務器發送請求,檢查文檔是否被 修改。幾乎全部的緩存服務器都支持Expires屬性。能夠設計一個絕對時間間隔:基於客戶最後查看副本的時間(最後訪問時間)或者根據服務器上文檔最後 被修改的時間。Expires頭信息對於設置靜態圖片緩存特別有用,這些圖片修改不多,能夠給它們設置一個特別長的過時時間,這會使網站對用戶變得相應很是快。 4. Cache-Control 緩存控制
讓網站的發佈者控制他們的內容,並定位過時時間的限制。好比:Cache-Control: max-age=3600, public,可選項以下:瀏覽器