第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

ASP.NET MVC和IE緩存-處理響應(yīng)頭無效

ASP.NET MVC和IE緩存-處理響應(yīng)頭無效

富國滬深 2019-11-18 18:25:05
背景我正在嘗試幫助同事調(diào)試過去6個月未曾出現(xiàn)的問題。在最近一次部署ASP.NET MVC 2應(yīng)用程序之后,F(xiàn)ileResult迫使用戶打開或保存PDF文件的響應(yīng)在客戶端計算機上存在的時間已經(jīng)很長,以至于PDF閱讀器無法打開它們。IE的早期版本(尤其是6)是唯一受影響的瀏覽器。Firefox和Chrome和較新版本的IE(> 8)的行為均符合預(yù)期??紤]到這一點,下一節(jié)將定義重新創(chuàng)建問題所需的操作。行為用戶單擊指向動作方法的鏈接(帶有href屬性的普通超鏈接)。action方法生成一個表示為字節(jié)流的PDF。該方法始終重新創(chuàng)建PDF。在操作方法中,設(shè)置了標(biāo)頭以指示瀏覽器如何緩存響應(yīng)。他們是:response.AddHeader("Cache-Control", "public, must-revalidate, post-check=0, pre-check=0");response.AddHeader("Pragma", "no-cache");response.AddHeader("Expires", "0");對于那些不熟悉標(biāo)頭功能的人:一種。緩存控制:公共表示該響應(yīng)可以被任何緩存所緩存,即使它通常是不可緩存的或僅可在非共享緩存中緩存的。b。緩存控制:必須重新驗證當(dāng)在緩存接收到的響應(yīng)中存在must-revalidate指令時,該緩存在過期之前將不能使用該條目以響應(yīng)后續(xù)請求,而不必先通過原始服務(wù)器對其進(jìn)行驗證,則該緩存不得使用該條目C。緩存控制:預(yù)檢查(與IE5一起引入)定義間隔(以秒為單位),在此間隔之后,必須檢查實體的新鮮度。在向用戶顯示資源之后,可能會進(jìn)行檢查,但要確保在下一次往返中緩存的副本是最新的。d。緩存控制:后檢查(與IE5一起引入)定義一個間隔(以秒為單位),在此間隔之后,必須先檢查實體的新鮮度,然后才能向用戶顯示資源。e。語法:無緩存(以確保與HTTP / 1.0的向后兼容性)當(dāng)請求消息中存在no-cache指令時,即使應(yīng)用程序已緩存了所請求內(nèi)容的副本,應(yīng)用程序也應(yīng)將請求轉(zhuǎn)發(fā)至原始服務(wù)器F。過期Expires實體標(biāo)題字段提供了將日期/時間視為過期的日期/時間。我們從動作中返回文件return File(file, "mime/type", fileName);向用戶顯示一個“打開/保存”對話框單擊“保存”按預(yù)期工作,但是單擊“打開”將啟動PDF閱讀器,但是在閱讀器嘗試打開文件時,已存儲的IE臨時文件已被刪除,因此它抱怨文件丟失(并且它是)。這里有六個其他應(yīng)用程序,它們使用相同的標(biāo)頭將Excel,CSV,PDF,Word以及大量其他內(nèi)容強加給用戶,因此從來沒有問題。問題標(biāo)頭是否符合我們要執(zhí)行的操作?我們希望文件臨時存在(被緩存),但始終將其替換為新版本,即使請求可能相同。在返回a之前,已在action方法中設(shè)置了響應(yīng)頭FileResult。我已經(jīng)請我的同事嘗試創(chuàng)建一個新類,該類繼承自,F(xiàn)ileResult并改寫該ExecuteResult方法,以便它修改標(biāo)頭,然后執(zhí)行此操作base.ExecuteResult()-此狀態(tài)沒有狀態(tài)。我預(yù)感“ 0”的“ Expires”標(biāo)頭是元兇。根據(jù)W3C的這篇文章,將其設(shè)置為“ 0”意味著“已經(jīng)過期”。我確實希望它過期,我只是不希望IE在處理它的應(yīng)用程序有機會打開它之前,先將其從文件系統(tǒng)中刪除。一如既往,謝謝!編輯:解決方案經(jīng)過進(jìn)一步測試(使用Fiddler檢查標(biāo)頭),我們看到我們認(rèn)為已設(shè)置的響應(yīng)標(biāo)頭不是瀏覽器正在解釋的標(biāo)頭。我自己還不熟悉代碼,但是我沒有意識到一個潛在的問題:標(biāo)頭被踩在action方法之外。盡管如此,我將保留這個問題。這樣做仍然很出色:Expires值為0vs. 的標(biāo)頭之間似乎存在一些差異-1。如果有人可以通過設(shè)計聲稱與眾不同,就IE而言,我仍然想聽聽。不過,對于解決方案,上述標(biāo)頭確實Expires可以-1在所有瀏覽器中使用設(shè)置為預(yù)期值的方式工作。更新1文章如何在所有瀏覽器中控制網(wǎng)頁緩存?詳細(xì)描述了可以通過設(shè)置Expires = 0來防止所有瀏覽器中的緩存。在此0vs -1參數(shù)上,我仍然不出售...
查看完整描述

3 回答

?
梵蒂岡之花

TA貢獻(xiàn)1900條經(jīng)驗 獲得超5個贊

對于IE,我記得必須設(shè)置Expires: -1。 如何防止Internet Explorer中的緩存似乎通過以下代碼片段進(jìn)行了確認(rèn)。


<% Response.CacheControl = "no-cache" %>

<% Response.AddHeader "Pragma", "no-cache" %>

<% Response.Expires = -1 %>

回顧代碼,這就是我發(fā)現(xiàn)的。另外,我隱約記得,如果設(shè)置Cache-Control: private為SSL,則可能無法正確運行。


Response.AddHeader("Cache-Control", "no-cache");

Response.AddHeader("Expires", "-1");

另外,所以,您不想緩存,是嗎?提及-1,但Response.Cache改為使用方法:


// Stop Caching in IE

Response.Cache.SetCacheability(System.Web.HttpCacheability.NoCache);

// Stop Caching in Firefox

Response.Cache.SetNoStore();

但是,ASP Page緩存問題(IE8)表示此代碼無效。


查看完整回答
反對 回復(fù) 2019-11-18
  • 3 回答
  • 0 關(guān)注
  • 615 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號