一:HTTP頭簡介
1.1瀏覽器第一次請求
假設(shè)我們請求一個URL地址,譬如我服務(wù)器上的一個靜態(tài)頁面,會返回如下的HTTP頭信息:
(注意,這里的Last Modified和Http頭中的Last-Modified沒有任何關(guān)系)。
每種瀏覽器都會有自己的緩存機制,但是都差不多,這里暫且不表。
1.3如何命中緩存
再次請求剛才的URL,我們得到頭信息如下:
然后再多次請求一下,我們發(fā)現(xiàn)每次都是200OK,并且我們發(fā)現(xiàn)頭信息中丟了一個很重要的信息,那就是Last-Modified。服務(wù)器沒有告訴瀏覽器自己的對象的最后修改日期,那么瀏覽器就只好每次去服務(wù)器重新獲取全部數(shù)據(jù)了。看到這里,我們應(yīng)該明白了,要讓瀏覽器不去拿數(shù)據(jù),動態(tài)程序就得想法設(shè)法自己添加這個頭信息。
好的,現(xiàn)在我們就在ASPX的后臺代碼中這樣來實現(xiàn)一個最簡單的頭信息添加:
復(fù)制代碼 代碼如下:
protected void Page_Load(object sender, EventArgs e)
{
this.Response.AddHeader("Last-Modified", DateTime.Now.ToString("U", DateTimeFormatInfo.InvariantInfo));
}
添加了頭信息后,我們發(fā)現(xiàn)再次請求URL后,頭信息變?yōu)槿缦拢?/P>
左邊是未做緩存的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
三:問題的提出
在上面的說到的瀏覽器緩存實現(xiàn)中,瀏覽器通過和WEB服務(wù)器的溝通協(xié)調(diào)機制來確定自己是否需要調(diào)用緩存,這意味著動態(tài)程序仍舊需要處理來自客戶端的請求,如果有一種機制能夠讓瀏覽器不需要請求服務(wù)器就能夠決定是否調(diào)用緩存,就能徹底舍去服務(wù)器處理這一環(huán)節(jié)。下一篇將繼續(xù)闡述這種機制。
新聞熱點
疑難解答
圖片精選