自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

caching協(xié)議應(yīng)用圖示解析

網(wǎng)絡(luò) 網(wǎng)絡(luò)管理
下文我們來對(duì)HTTP協(xié)議中的caching協(xié)議來進(jìn)行一個(gè)應(yīng)用介紹。包括四部分內(nèi)容:用Last-Modified頭、用Etag頭、用Expires頭和相關(guān)的總結(jié)。

在HTTP協(xié)議中,包括一種協(xié)議caching協(xié)議。那么對(duì)于這個(gè)協(xié)議的使用很多朋友都是不太清楚的。那么我們現(xiàn)在就針對(duì)這個(gè)協(xié)議的一些應(yīng)用來為大家進(jìn)行一下介紹。HTTP中caching協(xié)議用好了,可以極大的減小服務(wù)器負(fù)載和減少網(wǎng)絡(luò)帶寬。十分有必要深入了解下HTTP的caching協(xié)議。

先來看下HTTP的caching協(xié)議請(qǐng)求/響應(yīng)過程:

HTTP請(qǐng)求/響應(yīng)

HTTP請(qǐng)求/響應(yīng)

用Last-Modified 頭

在***次請(qǐng)求的響應(yīng)頭返回 Last-Modified 內(nèi)容,時(shí)間格式如:Wed, 22 Jul 2009 07:08:07 GMT。是零時(shí)區(qū)的 GMT 時(shí)間,servlet 中可以用 response.addDateHeader("Last-Modified", date.getTime()); 加入響應(yīng)頭。如圖:

last-modified 和 If-Modified-Since

last-modified 和 If-Modified-Since

Last-Modified 與 If-Modified-Since 對(duì)應(yīng)的,前者是響應(yīng)頭,后者是請(qǐng)求頭。服務(wù)器要處理 If-Modified-Since 請(qǐng)求頭與Last-Modified 對(duì)比看是否有更新,如果沒有更新就返回 304 響應(yīng),否則按正常請(qǐng)求處理。如果要在動(dòng)態(tài)內(nèi)容中使用它們,那就要程序來處理了。

ps:servlet 取 If-Modified-Since 可以用 long last = requst.getDateHeader("If-Modified-Since");#p#

HTTP的caching協(xié)議用Etag頭

很多時(shí)間可能不能用時(shí)間來確定內(nèi)容是否有更新。那可以用Etag頭,etag 是以內(nèi)容計(jì)算一個(gè)標(biāo)識(shí)。計(jì)算的方式可以自己決定,比如可以用 crc32、md5等。

Etag和If-None-Match

Etag和If-None-Match

Etag與If-None-Match是對(duì)應(yīng)的,前者是響應(yīng)頭,后者是請(qǐng)求頭。服務(wù)器要判斷請(qǐng)求內(nèi)容計(jì)算得到的Etag是否與請(qǐng)求頭 If-None-Match 是否一致,如果一致就表示沒有更新,返回304就可,否則按正常請(qǐng)求處理。可以參考:用 HTTPServletResponseWrapper 實(shí)現(xiàn)Etag過濾器。#p#

HTTP的caching協(xié)議用Expires頭,過期時(shí)間

當(dāng)請(qǐng)求的內(nèi)容有 Expires 頭的時(shí)候,瀏覽器會(huì)在這個(gè)時(shí)間內(nèi)不去下載這個(gè)請(qǐng)求的內(nèi)容(這個(gè)行為對(duì) F5 或 Ctrl+F2 無效,用 IE7,Firefox 3.5 試了,有效的比如:在地址輸入后回車)。

expires過期時(shí)間

expires過期時(shí)間

在 servlet 中可以用 response.addDateHeader("Expires", date.getTime()); 添加過期內(nèi)容。

ps:在HTTPwatch中可以看到 Result 為 (Cached) 狀態(tài)的。

HTTP的caching協(xié)議用 max-age 的 Cache-Control 頭

max-age 的值表示,多少秒后失效,在失效之前,瀏覽器不會(huì)去下載請(qǐng)求的內(nèi)容(當(dāng)然,這個(gè)行為對(duì) F5 或 Ctrl+F2 無效)。比如:服務(wù)器寫 max-age 響應(yīng):response.addHeader("Cache-Control", "max-age=10");

ps:如果你還要加一些 Cache-Control 的內(nèi)容,比如:private,***不要寫兩個(gè) addHeader,而是一個(gè) response.addHeader("Cache-Control", "private, max-age=10"); 否則 ie 可能對(duì) max-age 無效,原因它只讀***個(gè) Cache-Control 頭。

HTTP的caching協(xié)議小結(jié):

Last-Modified 與Etag頭(即是方式1和2)還是要請(qǐng)求服務(wù)器的,只是僅返回 304頭,不返回內(nèi)容。所以瀏覽怎么 F5 ,304 都是有效的。但用 Ctrl+F5 是全新請(qǐng)求的(這是瀏覽器行為,不發(fā)送緩存相關(guān)的頭)。

Expires 頭與 max-age 緩存是不需要請(qǐng)求服務(wù)器的,直接從本地緩存中取。但 F5 會(huì)忽視緩存(所以使用 HTTPwatch 之類的HTTP協(xié)議監(jiān)察工具時(shí),不要 F5 誤認(rèn)為 Expires 和 max-age 是無效的)。

責(zé)任編輯:佟健 來源: IT168
相關(guān)推薦

2010-06-24 13:18:38

ICMP協(xié)議

2010-06-12 18:06:09

無為ARP協(xié)議

2010-09-08 20:45:31

計(jì)算機(jī)網(wǎng)絡(luò)協(xié)議

2010-06-09 15:23:25

2010-06-21 17:58:06

2009-11-06 12:49:11

WCF面向服務(wù)

2010-09-10 14:03:47

echo協(xié)議

2010-09-17 15:44:21

網(wǎng)絡(luò)協(xié)議

2010-10-29 09:34:16

2010-09-07 12:06:46

PPPoE協(xié)議

2019-07-28 21:05:47

ICMPIP網(wǎng)絡(luò)協(xié)議

2010-06-17 16:06:18

串口協(xié)議

2010-06-28 16:12:43

ARP協(xié)議

2010-06-24 15:35:04

IPx協(xié)議

2009-12-14 16:55:34

動(dòng)態(tài)路由協(xié)議

2010-09-02 16:39:30

SOAP協(xié)議

2010-06-25 15:03:54

路由選擇協(xié)議

2011-08-03 09:18:39

RIP路由協(xié)議RIP

2010-07-08 14:54:30

BitTorrent協(xié)

2010-09-09 15:40:57

Internet協(xié)議簇
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)