一:HTTP頭簡介
1.1瀏覽器第一次請求
假設我們請求一個URL地址,譬如我服務器上的一個靜態頁面,會返回如下的HTTP頭信息:
(注意,這里的Last Modified和Http頭中的Last-Modified沒有任何關系)。
每種瀏覽器都會有自己的緩存機制,但是都差不多,這里暫且不表。
1.3如何命中緩存
再次請求剛才的URL,我們得到頭信息如下:
然后再多次請求一下,我們發現每次都是200OK,并且我們發現頭信息中丟了一個很重要的信息,那就是Last-Modified。服務器沒有告訴瀏覽器自己的對象的最后修改日期,那么瀏覽器就只好每次去服務器重新獲取全部數據了??吹竭@里,我們應該明白了,要讓瀏覽器不去拿數據,動態程序就得想法設法自己添加這個頭信息。
好的,現在我們就在ASPX的后臺代碼中這樣來實現一個最簡單的頭信息添加:
復制代碼 代碼如下:
protected void Page_Load(object sender, EventArgs e)
{
this.Response.AddHeader("Last-Modified", DateTime.Now.ToString("U", DateTimeFormatInfo.InvariantInfo));
}
添加了頭信息后,我們發現再次請求URL后,頭信息變為如下:
左邊是未做緩存的aspx頁面,右邊是做了緩存的aspx頁面,可以看到,吞吐率相差10倍之多。
提示,使用ab進行壓力測試的時候,需要加入If-Modified-Since的頭信息,命令如下:
C:/>ab -n1000 -c100 -H "If-Modified-Since: Friday, 09 September 2011 09:35:23 GMT"
本文代碼下載:MvcApplication320110909.rar
三:問題的提出
在上面的說到的瀏覽器緩存實現中,瀏覽器通過和WEB服務器的溝通協調機制來確定自己是否需要調用緩存,這意味著動態程序仍舊需要處理來自客戶端的請求,如果有一種機制能夠讓瀏覽器不需要請求服務器就能夠決定是否調用緩存,就能徹底舍去服務器處理這一環節。下一篇將繼續闡述這種機制。
新聞熱點
疑難解答
圖片精選