上面的設(shè)置表示:緩存5分鐘,根據(jù)不同的查詢字符串更新緩存。Location使用的是默認(rèn)值A(chǔ)ny,也就是可以在瀏覽器、代理服務(wù)器、Web服務(wù)器三個(gè)地方進(jìn)行緩存,在Response Headers中的體現(xiàn)就是Cache-Control:public, max-age=300。(如果你要用CDN加速,Cache-Control就要用public)。
然后,我們?cè)贔irefox瀏覽器中訪問這個(gè)頁(yè)面,并打開Firebug,見下圖:

第一次訪問,返回狀態(tài)碼為"200 OK",正常。這里Response Headers中的Vary:Accept-Encoding是因?yàn)镮IS啟用“動(dòng)態(tài)內(nèi)容壓縮”產(chǎn)生的,如果不啟用,就不會(huì)出現(xiàn)。
這時(shí)緩存應(yīng)該被建立起來了,我們按F5刷新一下瀏覽器,看一下結(jié)果,見下圖:

第二次訪問,返回狀態(tài)碼為"304 Not Modified",瀏覽器緩存生效,這也是我們期望的。
但是,請(qǐng)注意一下上圖中的Vary:*,它會(huì)讓瀏覽器的緩存失效,我們?cè)侔匆幌翭5驗(yàn)證一下。

果然,瀏覽器緩存失效,返回狀態(tài)碼變回了200 OK。緩存時(shí)間有5分鐘呢,第三次就失效了,這樣的結(jié)果顯然不是我們期望的。
上面的測(cè)試是在Web服務(wù)器上IIS啟用動(dòng)態(tài)內(nèi)容壓縮(dynamic content compression)的情況下進(jìn)行的,如果關(guān)閉動(dòng)態(tài)內(nèi)容壓縮,每次請(qǐng)求返回都是200 OK,Vary都是星號(hào)。也就是說瀏覽器游覽緩存根本沒起作用。
Bug欣賞完畢,我們進(jìn)行第二個(gè)測(cè)試。
將OutputCache的VaryByParam屬性值設(shè)置為none:
測(cè)試結(jié)果顯示,瀏覽器第一次請(qǐng)求之后,接下來在緩存時(shí)間內(nèi),服務(wù)器的響應(yīng)都是"304 Not Modified",這才是我們想要的效果。

但是,在實(shí)際應(yīng)用中,我們使用VaryByParam="none"很少,用的更多的是為VaryByParam指定對(duì)應(yīng)的值。
所以這個(gè)Bug影響很大,增加了服務(wù)器負(fù)擔(dān),浪費(fèi)了帶寬。
Bug相關(guān)信息
在微軟的官方文檔ASP.NET 4 Breaking Changes中專門提到了這個(gè)bug ―― "Output Caching Changes to Vary * HTTP Header":
In ASP.NET 1.0, a bug caused cached pages that specified Location="ServerAndClient" as an output 主站蜘蛛池模板: 阿拉善盟| 黄骅市| 奇台县| 柘荣县| 开封县| 梧州市| 本溪市| 剑阁县| 定襄县| 西华县| 祁连县| 柳林县| 屯留县| 临海市| 饶平县| 剑川县| 信丰县| 晋城| 屯昌县| 朔州市| 靖西县| 游戏| 奉节县| 花莲县| 诏安县| 安顺市| 延寿县| 仁寿县| 秦皇岛市| 永丰县| 五华县| 德格县| 大埔区| 枞阳县| 东城区| 泌阳县| 巴青县| 江城| 武城县| 东乡族自治县| 吴忠市|