頁面緩存參數
『壹』 .net帶有參數的頁面怎麼進行緩存,緩存後可瀏覽正確頁面
ASP.NET 提供三種主要形式的緩存:頁面緩存、用戶控制項輸出緩存和緩存 API。
頁面輸出緩存作為最簡單的緩存形式,將已經生成的動/靜太頁面全部內容保存在伺服器內容中。當再有請求時,系統將緩存中的相關數據直接輸出,直到緩存數據過期。在這個過程中,緩存不再要再次經過頁面處理生命周期。這樣可以縮短請求響應時間,提高應用程序性能。顯然,頁面輸出緩存適用於不需要頻繁更新數據,而佔用大量時間和資源才能編譯生成的頁面。
實現頁面輸出緩存,通常可以用以下兩種方法:
一、使用@ OutputCache指令
使用@ OutputCache指令,能夠實現對頁面輸出緩存的一般性需要。@ OutputCache指令在ASP.NET頁或者頁中包含的用戶控制項的頭部聲明。這種方式非常方便,只需幾個簡單的屬性設置,就能夠實現頁面的輸出緩存策略。
二、使用HttpCacheability類
該類主要包含用於設置緩存特定的HTTP標頭的方法和用於控制ASP.NET頁面輸出緩存的方法。與.NET Framework 1.x中的HttpCachePolicy類相比,.NET Framework 2.0中的HttpCachePolicy類得到了擴充和發展。
使用這兩種方法,我們可以實現下列功能:
1、使用參數對頁的各個版本進行緩存
使用 ASP.NET,您可以根據指定的 HTTP 標頭的值對某頁的多個版本進行緩存。當請求頁時,您可以指定按傳遞到應用程序的單個標頭、多個標頭或所有標頭進行緩存。
根據 HTTP 標頭值以聲明方式對某頁的各個版本進行緩存
A、 在 ASP.NET 頁中,在 @ OutputCache 指令中包括必需的 Duration 和 VaryByParam 或 VaryByControl 屬性。必須將 Duration 屬性設置為大於零的整數。如果希望只按 HTTP 標頭值進行緩存,則必須將 VaryByParam 屬性設置為「None」。
B、 在 @ OutputCache 指令中,包含 VaryByHeader 屬性,將其值設置為要作為改變緩存內容的依據的 HTTP 標頭的名稱。
下面的示例將頁緩存 60 秒,並根據隨 Accept-Language HTTP 標頭傳遞的值設置要緩存的頁的版本:
<%@ OutputCache Duration="60" VaryByParam="None" VaryByHeader="Accept-Language" %>
注意:如果要根據多個標頭改變緩存的內容,請以分號 (;) 作為分隔符包括標頭名稱的列表。如果要根據所有標頭值改變緩存的內容,請將 VaryByHeader 屬性設置為星號 (*)。
根據 HTTP 標頭值以編程方式對某頁的各個版本進行緩存
A、 在頁的 Page_Load 方法中,對頁的 Response 對象的 Cache 屬性調用 SetCacheability 和 SetExpires 方法。
B、 將 VaryByHeaders 屬性中的 HTTP 標頭值設置為 true。
下面的代碼示例演示如何為有不同的 Accept-Language HTTP 標頭值的請求,將某頁的多個版本緩存一分鍾之久。
protected void Page_Load(object sender, EventArgs e)
{
Response.Cache.SetExpires(DateTime.Now.AddMinutes(1d));
Response.Cache.SetCacheability(HttpCacheability.Public);
Response.Cache.SetValidUntilExpires(true);
Response.Cache.VaryByHeaders["Accept-Language"] = true;
}
注意:如果要根據多個標頭改變緩存的內容,需要在 VaryByHeaders 屬性中設置多個值。如果要根據所有標頭改變緩存的內容,請將 VaryByHeaders["VaryByUnspecifiedParameters"] 設置為 true。
2、使用請求瀏覽器緩存頁的各個版本
基於瀏覽器類型以聲明方式緩存頁的多個版本
A、 在 ASP.NET 頁中,包括一個具有必需的 Duration 以及 VaryByParam 或 VaryByControl 屬性的 @ OutputCache 指令。必須將 Duration 屬性設置為大於零的整數。如果希望僅按瀏覽器類型進行緩存,請將 VaryByParam 屬性設置為「None」。
B、 在 @ OutputCache 指令中,包括 VaryByCustom 屬性並將其設置為「browser」。下面的示例將導致持續緩存該頁達 10 秒。輸出將因瀏覽器類型而異。
<%@ OutputCache Duration="10" VaryByParam="None" VaryByCustom="browser" %>
基於瀏覽器類型以編程方式緩存頁的多個版本
A、 在頁代碼中,對頁的 Response 屬性的 Cache 屬性調用 SetExpires 和 SetCacheability 方法。
B、 調用 SetVaryByCustom 方法,在 custom 參數中傳遞值「browser」。
下面的代碼示例演示如何持續緩存頁的多個版本達 1 分鍾。輸出將因發出請求的瀏覽器的類型而異。
protected void Page_Load(object sender, EventArgs e)
{
Response.Cache.SetExpires(DateTime.Now.AddMinutes(1d));
Response.Cache.SetCacheability(HttpCacheability.Public);
Response.Cache.SetValidUntilExpires(true);
Response.Cache.SetVaryByCustom("browser");
}
3、 使用自定義字元串對頁的各個版本進行緩存
根據自定義字元串對頁輸出的多個版本進行緩存
A、 在 ASP.NET 頁中包括 @ OutputCache 指令,該指令帶有必需的 Duration 和 VaryByParam 屬性。必須將 Duration 屬性設置為大於零的整數。如果不想使用 VaryByParam 屬性提供的功能,則必須將其值設置為「無」。
B、 若要以聲明方式設置自定義字元串,請在 @ OutputCache 指令中包括 VaryByCustom 屬性,並將該屬性設置為您要作為進行不同輸出緩存行為的依據的字元串。
下面的指令根據自定義字元串「minorversion」改變頁輸出。
<%@ OutputCache Duration="10" VaryByParam="None" VaryByCustom="minorversion" %>
1. 若要以編程方式設置自定義字元串,請調用 SetVaryByCustom 方法,並將要使用的自定義字元串傳遞給它。
下面的代碼示例演示如何將自定義字元串設置為「minorversion」。
Response.Cache.SetVaryByCustom("minorversion");
在應用程序的 Global.asax 文件中,重寫 GetVaryByCustomString 方法以指定自定義字元串的輸出緩存行為。
被重寫的方法接受您在 VaryByCustom 屬性或 SetVaryByCustom 方法中設置的字元串,作為它的 arg 參數。例如,有些頁可能根據請求瀏覽器的次版本進行緩存。對於這些頁,可以將 VaryByCustom 屬性設置為「minorversion」。然後,在被重寫的 GetVaryByCustomString 方法中,可以檢查 arg 參數,並根據 arg 參數的值是否為「minorversion」返回不同的字元串。
下面的代碼示例演示一個 Global.asax 文件,其中的 GetVaryByCustomString 方法被重寫。
<%@ Application language="C#" %>
<script runat="server">
public override string GetVaryByCustomString(HttpContext context,
string arg)
{
if(arg == "minorversion")
{
return "Version=" +
context.Request.Browser.MinorVersion.ToString();
}
else
{
return "";
}
}
</script>
『貳』 asp動態頁面如何設置緩存
ASP頁面緩存的語句
Response.Buffer = True
Response.ExpiresAbsolute = Now() - 1
Response.Expires = 0
Response.CacheControl = "no-cache"
Response.AddHeader "Pragma", "No-Cache"
<HEAD>
<META HTTP-EQUIV="Pragma" CONTENT="no-cache">
<META HTTP-EQUIV="Cache-Control" CONTENT="no-cache">
<META HTTP-EQUIV="Expires" CONTENT="0">
</HEAD>
註解:
當Buffer為True的時候,asp會將這個程序解釋完畢後一起發送到客戶端,當Buffer為False的
時候,asp會邊解析邊發送數據.
ExpiresAbsolute 屬性指定緩存於瀏覽器中的頁的到期日期和時間。在未到期之前,若用戶
返回到該頁,該緩存的頁就顯示。如果未指定時間,該主頁在當天午夜到期。如果未指定日
期,則該主頁在腳本運行當天的指定時間到期。
表示當前頁面在客戶端 CACHE 存儲的時間,在指定時間內用戶瀏覽此網頁看到時
CACHE 裡面的而不是最新的內容,超過了指定時間瀏覽器則重新從伺服器上取最新的內容
,然後計時又重新開始。
CacheControl屬性設置代理伺服器是否可緩存ASP的輸出。默認設置為不可存。
AddHeader 方法用指定的值添加 HTML 標題。該方法常常向響應添加新的 HTTP 標題。它並
不替代現有的同名標題。一旦標題被添加,將不能刪除。
『叄』 Nginx怎樣設置瀏覽器緩存
瀏覽器緩存(BrowserCaching)
為了加速瀏覽器,瀏覽器在用戶磁碟上,對最近請求過的文檔進行存儲。
當訪問者再次請求這個頁面時,瀏覽器就可以從本地磁碟顯示文檔,這樣,就可以加速頁面的閱覽,緩存的方式節約了網路的資源,提高了網路的效率。
瀏覽器緩存可以通過expires指令輸出Header頭來實現,expires指令的語法如下
語法:expires[time| epoch | max |off]
默認值:expiresoff
作用域:http、server、location
用途:使用本指令可以控制http應答中的expires和Cache-Control的Header頭信息,起到控制頁面緩存的作用。
參數說明
Time,可以使用正數或負數,Expires頭標的值,將通過當前系統時間加上設定的time值來獲得。
epoch,指定expires的值為1January,1970,00:00:01 GMT。
Max,指定expires的值為31December 2037 23:59:59 GMT,Cache-Control的值為10年。
Off,表示不修改Expires和Cache-Control的值。
一個HTML頁面,會引用一些JavaScript文件、圖片文件、而這些格式的文件很少會被修改,則可以通過expires設置瀏覽器緩存。
比如,對常見格式的圖片、Flash文件在瀏覽器本地緩存30天,對JS、CSS文件在瀏覽器本地緩存1小時,代碼如下
『肆』 ☆前端優化:瀏覽器緩存技術介紹
在前端開發中,性能一直都是被大家所重視的一點,然而判斷一個網站的性能最直觀的就是看網頁打開的速度。 其中提高網頁反應速度的一個方式就是使用緩存 。緩存技術一直一來在WEB技術體系中扮演非常重要角色,是快速且有效地提升性能的手段。
一個優秀的緩存策略可以縮短網頁請求資源的距離,減少延遲,並且由於緩存文件可以重復利用,還可以減少帶寬,降低網路負荷。
所以,緩存技術是無數WEB開發從業人員在工作過程中不可避免的一大問題。 在產品開發的時候我們總是想辦法避免緩存產生,而在產品發布之時又在想策略管理緩存提升網頁的訪問速度 。了解瀏覽器的緩存命中原理,是開發WEB應用的基礎,本文著眼於此,學習瀏覽器緩存的相關知識,總結緩存避免和緩存管理的方法,結合具體的場景說明緩存的相關問題。希望能對有需要的人有所幫助。
在實際WEB開發過程中,緩存技術會涉及到不同層、不同端,比如:用戶層、系統層、代理層、前端、後端、服務端等, 每一層的緩存目標都是一致的,就是盡快返回請求數據、減少延遲 ,但每層使用的技術實現是各有不同,面對不同層、不同端的優劣,選用不同的技術來提升系統響應效率。所以,我們首先看下各層的緩存都有哪些技術,都緩存哪些數據,從整體上,對WEB的緩存技術進行了解,如下圖所示:
本篇文章重點講的就是上面紅色框部分緩存內容。
當瀏覽器請求一個網站的時候,會載入各種各樣的資源,比如:HTML文檔、圖片、CSS和JS等文件。對於一些不經常變的內容,瀏覽器會將他們保存在本地的文件中,下次訪問相同網站的時候,直接載入這些資源,加速訪問。
那麼如何知曉瀏覽器是讀取了緩存還是直接請求伺服器?如下圖網站來做個示例:
第一次打開該網站後,如果再次刷新頁面。會發現瀏覽器載入的眾多資源中,有一部分size有具體數值,然而還有一部分請求,比如圖片、css和js等文件並沒有顯示文件大小,而是顯示了 from dis cache 或者 from memory cache 字樣。這就說明了,該資源直接從本地硬碟或者瀏覽器內存讀取,而並沒有請求伺服器。
瀏覽器啟用緩存至少有兩點顯而易見的好處: (1)減少頁面載入時間;(2)減少伺服器負載;
瀏覽器是否使用緩存、緩存多久,是由伺服器控制的 。准確來說,當瀏覽器請求一個網頁(或者其他資源)時, 伺服器發回的響應的「響應頭」部分的某些欄位指明了有關緩存的關鍵信息 。下面看下,HTTP報文中與緩存相關的首部欄位:
根據上面四種類型的首部欄位不同使用策略, 瀏覽器中緩存可分為強緩存和協商緩存 :
當瀏覽器對某個資源的請求命中了強緩存時, 返回的HTTP狀態為200 ,在chrome的開發者工具的network裡面 size會顯示為from cache ,比如:京東的首頁里就有很多靜態資源配置了強緩存,用chrome打開幾次,再用f12查看network,可以看到有不少請求就是從緩存中載入的:
Expires是HTTP 1.0提出的一個表示資源過期時間的header,它描述的是一個絕對時間,由伺服器返回,用GMT格式的字元串表示 ,如:Expires:Thu, 31 Dec 2037 23:55:55 GMT,包含了Expires頭標簽的文件,就說明瀏覽器對於該文件緩存具有非常大的控制權。
例如,一個文件的Expires值是2020年的1月1日,那麼就代表,在2020年1月1日之前,瀏覽器都可以直接使用該文件的本地緩存文件,而不必去伺服器再次請求該文件,哪怕伺服器文件發生了變化。
所以, Expires是優化中最理想的情況,因為它根本不會產生請求 ,所以後端也就無需考慮查詢快慢。它的緩存原理,如下:
Expires是較老的強緩存管理header, 由於它是伺服器返回的一個絕對時間 ,在伺服器時間與客戶端時間相差較大時,緩存管理容易出現問題, 比如:隨意修改下客戶端時間,就能影響緩存命中的結果 。所以在HTTP 1.1的時候,提出了一個新的header, 就是Cache-Control,這是一個相對時間,在配置緩存的時候,以秒為單位,用數值表示 ,如:Cache-Control:max-age=315360000,它的緩存原理是:
Cache-Control描述的是一個相對時間 ,在進行緩存命中的時候, 都是利用客戶端時間進行判斷 ,所以相比較Expires,Cache-Control的緩存管理更有效,安全一些。
這兩個header可以只啟用一個,也可以同時啟用, 當response header中,Expires和Cache-Control同時存在時,Cache-Control優先順序高於Expires :
此外,還可以為 Cache-Control 指定 public 或 private 標記。 如果使用 private,則表示該資源僅僅屬於發出請求的最終用戶,這將禁止中間伺服器(如代理伺服器)緩存此類資源 。對於包含用戶個人信息的文件(如一個包含用戶名的 HTML 文檔),可以設置 private,一方面由於這些緩存對其他用戶來說沒有任何意義,另一方面用戶可能不希望相關文件儲存在不受信任的伺服器上。需要指出的是,private 並不會使得緩存更加安全,它同樣會傳給中間伺服器(如果網站對於傳輸的安全性要求很高,應該使用傳輸層安全措施)。 對於 public,則允許所有伺服器緩存該資源 。通常情況下,對於所有人都可以訪問的資源(例如網站的 logo、圖片、腳本等), Cache-Control 默認設為 public 是合理的 。
當瀏覽器對某個資源的請求沒有命中強緩存, 就會發一個請求到伺服器,驗證協商緩存是否命中,如果協商緩存命中,請求響應返回的http狀態為304並且會顯示一個Not Modified的字元串 ,比如你打開京東的首頁,按f12打開開發者工具,再按f5刷新頁面,查看network,可以看到有不少請求就是命中了協商緩存的:
查看單個請求的Response Header, 也能看到304的狀態碼和Not Modified的字元串,只要看到這個就可說明這個資源是命中了協商緩存,然後從客戶端緩存中載入的 ,而不是伺服器最新的資源:
【Last-Modified,If-Modified-Since】的控制緩存的原理,如下 :
【Last-Modified,If-Modified-Since】都是根據伺服器時間返回的header,一般來說, 在沒有調整伺服器時間和篡改客戶端緩存的情況下,這兩個header配合起來管理協商緩存是非常可靠的,但是有時候也會伺服器上資源其實有變化,但是最後修改時間卻沒有變化的情況 ,而這種問題又很不容易被定位出來,而當這種情況出現的時候,就會影響協商緩存的可靠性。 所以就有了另外一對header來管理協商緩存,這對header就是【ETag、If-None-Match】 。它們的緩存管理的方式是:
Etag和Last-Modified非常相似,都是用來判斷一個參數,從而決定是否啟用緩存。 但是ETag相對於Last-Modified也有其優勢,可以更加准確的判斷文件內容是否被修改 ,從而在實際操作中實用程度也更高。
協商緩存跟強緩存不一樣,強緩存不發請求到伺服器, 所以有時候資源更新了瀏覽器還不知道,但是協商緩存會發請求到伺服器 ,所以資源是否更新,伺服器肯定知道。大部分web伺服器都默認開啟協商緩存,而且是同時啟用【Last-Modified,If-Modified-Since】和【ETag、If-None-Match】,比如apache:
如果沒有協商緩存,每個到伺服器的請求,就都得返回資源內容,這樣伺服器的性能會極差。
【Last-Modified,If-Modified-Since】和【ETag、If-None-Match】一般都是同時啟用,這是為了處理Last-Modified不可靠的情況。有一種場景需要注意:
比如,京東頁面的資源請求,返回的repsonse header就只有Last-Modified,沒有ETag:
協商緩存需要配合強緩存使用,上面這個截圖中,除了Last-Modified這個header,還有強緩存的相關header, 因為如果不啟用強緩存的話,協商緩存根本沒有意義 。
如果資源已經被瀏覽器緩存下來,在緩存失效之前,再次請求時,默認會先檢查是否命中強緩存,如果強緩存命中則直接讀取緩存,如果強緩存沒有命中則發請求到伺服器檢查是否命中協商緩存,如果協商緩存命中,則告訴瀏覽器還是可以從緩存讀取,否則才從伺服器返回最新的資源。其瀏覽器判斷緩存的詳細流程圖,如下:
『伍』 .net帶有參數的頁面怎麼進行緩存,緩存後可瀏覽正確頁面
可以先打開「工具」-」internet選項「,找高級選項里重置ie設置;
不行就重新安裝ie瀏覽器,重裝ie瀏覽器也無法正常瀏覽網頁的時候,建議換其它瀏覽器上網(如谷歌、火狐等品牌瀏覽器)
『陸』 html 頁面怎麼對緩存進行設置
根據伺服器系統環節的不同設置方法不一樣
1、在Apache環境下
可以通過在.htaccess文件中添加下面的代碼,設置圖片的HTTP緩存和有效期(需要開啟apache的headers模塊支持):
#.gimhoy.com<FilesMatch".(flv|gif|jpg|jpeg|png|ico|swf)$">HeadersetCache-Control"max-age=3156000"
其中max-age後面這個數字就是設置的緩存有效期(以秒為單位),比如上面的代碼設置了網站的圖片使用為期一年(3156000秒)的HTTP緩存。
2、在Nginx下
可以通過修改nginx.conf配置文件,來修改緩存設置:
location ~* .(flv|gif|jpg|jpeg|png|ico|swf)$ { expires 1y; access_log off; break; }
注意:同樣的方法,可以給js和css文件設置緩存。
『柒』 關於html緩存設置
通過HTTP的META設置expires和cache-control
指令不區分大小寫,並且具有可選參數,可以用令牌或者帶引號的字元串語法。多個指令以逗號分隔。
客戶端可以在HTTP請求中使用的標准 Cache-Control 指令。
Cache-Control: max-stale[=<seconds>]
Cache-Control: min-fresh=<seconds>
Cache-control: no-cache
Cache-control: no-store
Cache-control: no-transform
Cache-control: only-if-cached
伺服器可以在響應中使用的標准 Cache-Control 指令。
Cache-control: no-cache
Cache-control: no-store
Cache-control: no-transform
Cache-control: public
Cache-control: private
Cache-control: proxy-revalidate
Cache-Control: max-age=<seconds>
Cache-control: s-maxage=<seconds>
拓展緩存指令不是HTTP緩存標準的一部分,使用前請注意檢查 兼容性 !
Cache-control: immutable
Cache-control: stale-while-revalidate=<seconds>
Cache-control: stale-if-error=<seconds>
public
表明響應可以被任何對象(包括:發送請求的客戶端,代理伺服器,等等)緩存。
private
表明響應只能被單個用戶緩存,不能作為共享緩存(即代理伺服器不能緩存它)。
no-cache
強制所有緩存了該響應的緩存用戶,在使用已存儲的緩存數據前,發送帶驗證器的請求到原始伺服器
only-if-cached
表明如果緩存存在,只使用緩存,無論原始伺服器數據是否有更新
max-age=<seconds>
設置緩存存儲的最大周期,超過這個時間緩存被認為過期(單位秒)。與Expires相反,時間是相對於請求的時間。
s-maxage=<seconds>
覆蓋max-age 或者 Expires 頭,但是僅適用於共享緩存(比如各個代理),並且私有緩存中它被忽略。
max-stale[=<seconds>]
表明客戶端願意接收一個已經過期的資源。 可選的設置一個時間(單位秒),表示響 應不能超過的過時時間。
min-fresh=<seconds>
表示客戶端希望在指定的時間內獲取最新的響應。
must-revalidate
緩存必須在使用之前驗證舊資源的狀態,並且不可使用過期資源。
proxy-revalidate
與must-revalidate作用相同,但它僅適用於共享緩存(例如代理),並被私有緩存忽略。
immutable
表示響應正文不會隨時間而改變。資源(如果未過期)在伺服器上不發生改變,因此客戶端不應發送重新驗證請求頭(例如If-None-Match或If-Modified-Since)來檢查更新,即使用戶顯式地刷新頁面。在Firefox中,immutable只能被用在 https:// transactions.
發送如下指令可以關閉緩存。此外,可以參考Expires 和 Pragma 標題。
對於應用程序中不會改變的文件,你通常可以在發送響應頭前添加積極緩存。這包括例如由應用程序提供的靜態文件,例如圖像,CSS文件和JavaScript文件。另請參閱Expires標題。
緩存主要兩個策略 強制緩存 ,協商緩存
強制緩存就是設置本地資源html img js等等緩存多長時間 超過時間就去伺服器端取。
協商緩存就是每次都詢問伺服器資源是否已經過期 沒有過期就使用緩存 已經過期就從伺服器上重新取。
緩存流程可以分三個階段 本地緩存,協商緩存 ,緩存失敗
現在的vue項目里都不是這樣緩存的 我個人感覺這是在靜態頁面時的緩存辦法
現在都是webpack打包時通過 hash chunkhash contenthash來決定緩存方式 主要就是在請求的文件名稱後面加一個id 來判斷文件是否已經更新。