国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 編程 > .NET > 正文

一個(gè)伴隨ASP.NET從1.0到4.0的OutputCache Bug介紹

2020-01-18 00:36:48
字體:
供稿:網(wǎng)友
我們先來一睹這個(gè)Bug的風(fēng)采!

在一個(gè).aspx文件中增加OutputCache設(shè)置,代碼如下:
復(fù)制代碼 代碼如下:

<%@ OutputCache Duration="300" VaryByParam="*"%>

上面的設(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:

復(fù)制代碼 代碼如下:

<%@ OutputCache Duration="600" VaryByParam="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

主站蜘蛛池模板: 阿拉善盟| 黄骅市| 奇台县| 柘荣县| 开封县| 梧州市| 本溪市| 剑阁县| 定襄县| 西华县| 祁连县| 柳林县| 屯留县| 临海市| 饶平县| 剑川县| 信丰县| 晋城| 屯昌县| 朔州市| 靖西县| 游戏| 奉节县| 花莲县| 诏安县| 安顺市| 延寿县| 仁寿县| 秦皇岛市| 永丰县| 五华县| 德格县| 大埔区| 枞阳县| 东城区| 泌阳县| 巴青县| 江城| 武城县| 东乡族自治县| 吴忠市|