麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 學院 > 開發設計 > 正文

OutputCache屬性詳解(二)一 Location

2019-11-17 01:46:08
字體:
來源:轉載
供稿:網友

OutputCache屬性詳解(二)一 Location

目錄

  • OutputCache概念學習

  • OutputCache屬性詳解(一)

  • OutputCache屬性詳解(二)

  • OutputCache屬性詳解(三)

  • OutputCache屬性詳解(四)— SqlDependency

Web應用程序中的使用緩存位置:

  • 客戶端緩存(Client Caching)
  • 代理緩存(PRoxy Caching)
  • 反向代理緩存(Reverse Proxy Caching)
  • 服務器緩存(Web Server Caching)

Location:OutputCacheLocation 枚舉值之一。

使用該枚舉指定的值。這些值確定頁輸出的緩存位置。默認值為 Any。

  • Any:輸出緩存可位于產生請求的瀏覽器客戶端、參與請求的代理服務器(或任何其他服務器)或處理請求的服務器上。此值對應于 HttpCacheability.Public 枚舉值。         
  • Client:輸出緩存位于產生請求的瀏覽器客戶端上。此值對應于 HttpCacheability.Private 枚舉值。         
  • Downstream:輸出緩存可存儲在任何 HTTP 1.1 可緩存設備中,源服務器除外。這包括代理服務器和發出請求的客戶端。         
  • None:對于請求的頁,禁用輸出緩存。此值對應于 HttpCacheability.NoCache 枚舉值。         
  • Server:輸出緩存位于處理請求的 Web 服務器上。此值對應于 HttpCacheability.Server 枚舉值。         
  • ServerAndClient:輸出緩存只能存儲在源服務器或發出請求的客戶端中。代理服務器不能緩存響應。此值對應于 HttpCacheability.Private 和 HttpCacheability.Server 枚舉值的組合。

測試前準備,新建WebSite站點,配置文件增加:

  <system.web>    <caching>      <outputCacheSettings>        <outputCacheProfiles>           <!--name 緩存配置名稱           duration 緩存的時間(以秒計)           enabled  指定緩存有效           -->          <add name="outputCache60" duration="60" enabled="true" varyByParam="*" location="Any" />        </outputCacheProfiles>      </outputCacheSettings>    </caching>    <compilation debug="true"/>  </system.web>

增加兩個頁面Default.aspx和Default2.aspx如下:

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><%@ OutputCache CacheProfile="outputCache60"  %><html xmlns="http://www.w3.org/1999/xhtml"><head runat="server">    <title></title></head><body>    <form id="form1" runat="server">    <div>    <%=DateTime.Now %>      </div>      <a href="Default2.aspx" target="_blank">Default2.aspx</a>    </form></body></html>

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default2.aspx.cs" Inherits="Default2" %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><%@ OutputCache CacheProfile="outputCache60"  %><html xmlns="http://www.w3.org/1999/xhtml"><head id="Head1" runat="server">    <title></title></head><body>    <form id="form1" runat="server">    <div>    <%=DateTime.Now %>    </div>    <a href="Default.aspx" >Default.aspx</a>    </form></body></html>

Any:輸出緩存可位于產生請求的瀏覽器客戶端、參與請求的代理服務器(或任何其他服務器)或處理請求的服務器上。

<add name="outputCache60" duration="60" enabled="true" varyByParam="*" location="Any" />

在客戶端,第一次請求為HTTP狀態碼為200,第二次請求的HTTP狀態碼為304

第一次HTTP的請求和響應信息如下(200):

第二次HTTP的請求和響應信息如下(304):

我們可以看到,第二次請求時,請求標頭里多了個 If-Modified-Since 和Last-Modified標簽:

  • 客戶端發HTTP請求時,使用If-Modified-Since標簽,把上次服務器告訴它的文件最后修改時間 返回到服務器端了。
  • 因為文件被改動過,兩邊時間不一致,所以服務器返回的HTTP狀態碼是200,并發送新頁面的全 部內容。
  • 服務器返回的HTTP頭標簽中有Last-Modified,告訴客戶端頁面的新的最后修改時間。

Cache-control 大家也可以看下

并且第二次響應中并沒有來自服務端響應數據,Any在多個客戶端統一請求該頁面的情況下,反饋給客戶端的數據都是一致的,也就是從服務端獲取的。(PS:這點與Client不同),如下:

Client:輸出緩存位于產生請求的瀏覽器客戶端上。

<add name="outputCache60" duration="60" enabled="true" varyByParam="*" location="Client" />

第一次數據請求與響應情況如下:

客戶端緩存,如果用戶在瀏覽器中點擊“后退”按鈕或在地址欄中重新輸入URL,那么在這種情況下,瀏覽器將從緩存獲取頁面;然而,如果用戶點擊“刷新”按鈕,那么瀏覽器中緩存將失效,瀏覽器發送頁面請求。但是瀏覽器做回退操作時,本身就可以讀取自身的緩存數據,這樣抓取的數據沒有意義,所以我們第二次抓取的順序需要是:

1.第一次進入Default.aspx頁面(抓取一次Default.aspx)

2.點擊 Default2.aspx 鏈接

3.進入Deafult2.aspx頁面后,點擊頁面中的Default.aspx鏈接跳轉回來(抓取一次Default.aspx)

這時候我們抓取的才是真正的304而不是瀏覽器自帶的304。

第二次請求抓取的請求與相應數據,如下圖:

可以看出設置成Client時,第二次請求時,在請求頭中,客戶端與服務端的鏈接已經斷開,沒有任何請求服務端的操作,且響應的狀態碼為304,讀取本地緩存。

多個客戶端同時請求時,其反饋的數據不一致,如下:

Downstream:輸出緩存可存儲在任何 HTTP 1.1 可緩存設備中,源服務器除外。這包括代理服務器和發出請求的客戶端。  

<add name="outputCache60" duration="60" enabled="true" varyByParam="*" location="Downstream" />

個人感覺DownstreamClinet類似,只不過有兩個小區別:

  • 數據存儲空間和數據存儲模式不一樣,后面會總結
  • Cache-Control,Client為private、Downstream 為 public

我們按照Clinet的方式繼續抓取兩次的請求與響應信息如下:

第一次請求與響應:

第二次請求與響應,與clinet完全一致,且在多個客戶端下數據也不同。

None:對于請求的頁,禁用輸出緩存。此值對應于 HttpCacheability.NoCache 枚舉值。

<add name="outputCache60" duration="60" enabled="true" varyByParam="*" location="None" />

我們繼續按抓取Clinet的方式抓取兩次請求和響應信息,如下:

第一次請求與響應:

第二次請求與響應:

可以看到兩次的請求與響應一致,且返回狀態碼都是200,在Cache-Control信息中為no-cache,響應信息中也不夾帶任何緩存相關的標簽。

private、must-revalidate、max-age、no-cache 對于瀏覽器操作的訪問大家可以看下

關于Pragma:no-cache,跟Cache-Control: no-cache相同。Pragma: no-cache兼容http 1.0 ,Cache-Control: no-cache是http 1.1提供的。因此,Pragma: no-cache可以應用到http 1.0 和http 1.1,而Cache-Control: no-cache只能應用于http 1.1.

在多個客戶端請求時,頁面所展示的信息不會一致。

Server:輸出緩存位于處理請求的 Web 服務器上。此值對應于 HttpCacheability.Server 枚舉值。

<add name="outputCache60" duration="60" enabled="true" varyByParam="*" location="Server" />

繼續按抓取Clinet的方式抓取兩次請求和響應信息,如下:

可以看到HTTP請求與響應的數據與設置為None 類似,但是在多個客戶端的情況下,Server的數據能保持一致,但None則不能。

ServerAndClient:輸出緩存只能存儲在源服務器或發出請求的客戶端中。代理服務器不能緩存響應。此值對應于 HttpCacheability.Private 和 HttpCacheability.Server 枚舉值的組合。

繼續按抓取Clinet的方式抓取兩次請求和響應信息,如下:

看請求與設置為Client差不多,但是Clinet在多客戶端下數據為不一致的,但ServerAndClient在多客戶端下則能保持一致

總結,如有問題或理解錯誤 歡迎指正。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 精品国产一区三区| 黄色免费不卡视频 | 国产精品久久久久久久久久久天堂 | 亚洲精品成人18久久久久 | 综合97 | 亚洲国产成人久久一区www妖精 | 国产一级免费av | 91重口视频 | 一级免费黄视频 | h视频在线免费观看 | 日韩黄色一级视频 | 久久精品日产高清版的功能介绍 | 欧美成人国产va精品日本一级 | 欧美乱论| 国产精品成人亚洲一区二区 | 免费一级欧美 | 国产精品9191 | 国产精品久久久久久久久久久久久久久久 | 免费在线观看国产精品 | 国产亚洲美女精品久久久2020 | 精品久久久久久综合日本 | 猫咪av在线 | 99ri在线| 久久精品无码一区二区日韩av | 亚洲午夜天堂吃瓜在线 | 二区视频| av在线免费观看不卡 | 亚洲成人免费网站 | 成年人免费黄色片 | 亚洲极色| 黄色网址在线视频 | 中文字幕观看 | 日韩欧美精品电影 | chinesegv男男猛男无套 | 日本aaa一级片 | 精品国产91久久久久久久 | 久久久经典视频 | 一区二区三区无码高清视频 | 欧美另类综合 | 国产羞羞视频 | 国产亚洲精品美女久久久 |