程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> ASP.NET >> 關於ASP.NET >> Step1數據系統技術(3.使用浏覽器Cache和http狀態碼304實現的客戶端緩存)

Step1數據系統技術(3.使用浏覽器Cache和http狀態碼304實現的客戶端緩存)

編輯:關於ASP.NET

實在抱歉,因為本來這個系列應該早就應該寫完的,不過在我寫了兩章之後,沒有過多久,我的網站就崩潰了,崩潰的原因是有人試圖從我的網站抓取數據,從而造成了網站數據庫的頻繁訪問,如果大家看過我以前的幾篇,應該知道發生這樣的事情同樣會造成服務器緩存文件過多,因為我使用的是虛擬主機,因此,服務器就崩潰了。因此我覺得這個系統還存在缺陷,因此暫時沒有繼續介紹(當然到現在也沒有改善多少),之後就是春節,春節之後我就開始找工作,而且也一直沒有心情來寫這個,因此拖延了很久,到現在,我終於覺得不好意思了,決定不管是否完善,都將這個系統介紹完,就算拋磚引玉吧。

從我個人看來,網站的制作其實是一個很精細的事情,只是太精細之後,需要的開發成本就會提高,不過因為當前很多網站不需要如此精細的網站,所以很多技術沒有被重視,當硬件受到制約的時候(尤其是大的網站),這些技術就需要認真使用了,Cache和http狀態碼就是這樣的例子,畢竟我覺得大多數的頁面是允許有一定的延遲的。

Cache就是浏覽器的緩存技術,大家肯定不陌生,浏覽器在每次加載一個文件的時候,都要去自己的緩存文件夾裡面去查找是否存在可用緩存,如果存在,則不再去服務器下載而直接使用本地內容,這是一個很好的節省服務器性能和流量的方式,在網站不做任何設置的情況下,浏覽器會根據用戶的設置來確定是否使用緩存,可見浏覽器的“Internet選項”的“浏覽歷史紀錄”的“設置”部分。

通常來講,Cache設置有兩種方式:第一種是在HTML內容的head之中設置:

<meta  http-equiv="Expires"  CONTENT="0">  //這一句設置文件的過期時間為0秒

<meta  http-equiv="Cache-Control"  CONTENT="no-cache">  //這一句設置文件禁止被緩存

第二種是通過HTTP Head來設置,例如在.NET(C#)之中:

Response.Cache.SetExpires(time);//設置文件的過期時間為當前的時間。

我個人比較喜歡通過HTTP HEAD這種方式來設置,因為我覺得這不屬於HTML本身的內容,當然,如果是靜態文件,就只能通過html head來設置了,在我的網站"地名信息系統"之中,我設置了每個HTML頁面在7天後失效,因為該HTML是自動生成的。

在上面的Cache介紹之中,提到了浏覽器在存在緩存的時候不去服務器取相關的內容,可是僅僅這樣設置,好像有時候這些浏覽器還是去服務器請求,有些時候的請求很合理,例如用戶點擊“刷新”按鈕的時候,有些時候我也不知道為什麼,因此,我在系統之中進一步使用了HTTP狀態碼。

HTTP狀態碼有很多用戶不願意去了解,其實這是很重要的內容,至於怎麼個重要法,以及詳細的使用說明請大家去參考相關的文檔,我這裡舉幾個例子:

1.有的用戶在網站頁面不存在的時候顯示了自己定義的頁面,可是忘記使用404狀態碼,這樣浏覽器就不知道它下載的內容究竟是正常內容還是頁面不存在的提示,可能用戶能從頁面內容上分辨出來,可是搜索引擎的機器人不會,因此就可能會被搜索引擎列入“無法檢索”的黑名單。

2.在頁面轉向的時候不使用301或者302的狀態碼,造成搜索引擎不知道葉面已經被轉向。

我專門要說的304是一個用處和Cache相同的東西,這個狀態碼的含義是“服務器端沒有更新”,也就是說客戶端的文件版本是最新的,他的用法是這樣的:

1.當用戶首次請求該文件的時候,通過HTTP HEAD的Last-Modified字段將該文件的最後修改日期發送到客戶端,讓客戶端知道該文件的版本,例如:

Last-Modified: Tue, 08 Apr 2008 14:48:05 GMT

2.在浏覽器再次請求該文件的時候,會自動將該時間作為請求的HTTP HEAD的If-Modified-Since字段內容(有時候根據浏覽器的不同,可能會用逗號隔開附加上文件的字節數大小),例如:

If-Modified-Since: Tue, 08 Apr 2008 14:48:05 GMT

3.服務端根據If-Modified-Since字段的內容(如果存在該字段)來判斷客戶端的文件是否已經過期,如果已經過期,則重新返回新的文件,如果沒有,則只需要返回304狀態碼,就可結束輸出,這樣代表浏覽器端的文件版本是最新的,不需要返回文件內容。

要知道,服務器返回一個304的時間要比返回整個文件的時間要小得多,性能損耗和網絡占用也小得多。

Cache和304技術有一定的重復,我選擇Cache和304技術一起使用是因為單用Cache好像浏覽器有時候還是去取最新內容(尤其是用戶點擊刷新按鈕的時候),而單獨使用304則在浏覽器向服務器詢問的過程還是會占用一定的性能和時間。這兩種技術結合起來使用是剛剛好的。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved