<---響應頭--->php
長鏈接:html
Connection: keep-alive 開啓長鏈接 ---- connection 英 [kəˈnekʃn]鏈接 keep 英 [ki:p]保持 alive 英 [əˈlaɪv]活着的
Keep-Alive: timeout=20 長鏈接時間 ---- timeout 超時chrome
X-Cachejson
X-Cache: 表示你的 http request 是由 proxy server 回的 .
MISS 表示proxy無緩存, HIT 表示proxy緩存了瀏覽器
例:x-cache:MISS from fs-20 沒有用到緩存
x-cache: HIT from fs-20 用到緩存了緩存
Cache-Control主要有如下幾種類型:
(1) 請求Request:
[1] no-cache ---- 不要讀取緩存中的文件,要求向WEB服務器從新請求 (這個很容易讓人產生誤解,令人誤覺得是響應不被緩存。實際上Cache-Control: no-cache是會被緩存的,只不過每次在向瀏覽器提供響應數據時,緩存都要向服務器評估緩存響應的有效性。)
[2] no-store ---- 請求和響應都禁止被緩存 (這個纔是響應不被緩存的意思) ---- store [stɔ:(r)] 存儲
[2] max-age: ---- 表示當訪問此網頁後的max-age秒內再次訪問不會去服務器請求,其功能與Expires相似,只是Expires是根據某個特定日期值作比較。一但緩存者自身的時間不許確.則結果可能就是錯誤的,而max-age,顯然無此問題.。Max-age的優先級也是高於Expires的。
[3] max-stale ---- 容許讀取過時時間必須小於max-stale 值的緩存對象。 ----max [mæks] 最大值 stale [steɪl] 不新鮮的;陳舊
[4] min-fresh ---- 接受其max-age生命期大於其當前時間 跟 min-fresh 值之和的緩存對象 ---- min [mɪn] 分鐘; 最小 fresh [freʃ] 新鮮;新的
[5] only-if-cached ---- 告知緩存者,我但願內容來自緩存,我並不關心被緩存響應,是不是新鮮的.
[6] no-transform ---- 告知代理,不要更改媒體類型,好比jpg,被你改爲png. ---- transform [trænsˈfɔ:m] 變換
(2) 響應Response:
[1] public ---- 數據內容皆被儲存起來,就連有密碼保護的網頁也儲存,安全性很低
[2] private ---- 數據內容只能被儲存到私有的cache,僅對某個用戶有效,不能共享 ----private [ˈpraɪvət] 私有的
[3] no-cache ---- 能夠緩存,可是隻有在跟WEB服務器驗證了其有效後,才能返回給客戶端
[4] no-store ---- 請求和響應都禁止被緩存
[4] max-age: ----- 本響應包含的對象的過時時間
[5] Must-revalidate ---- 若是緩存過時了,會再次和原來的服務器肯定是否爲最新數據,而不是和中間的proxy ---- Must [məst] 必須 revalidate [rɪ'vælɪdeɪt] 使從新生效
[6] max-stale ---- 容許讀取過時時間必須小於max-stale 值的緩存對象。
[7] proxy-revalidate ---- 與Must-revalidate相似,區別在於:proxy-revalidate要排除掉用戶代理的緩存的。即其規則並不該用於用戶代理的本地緩存上。
[8] s-maxage ---- 與max-age的惟一區別是,s-maxage僅僅應用於共享緩存.而不該用於用戶代理的本地緩存等針對單用戶的緩存. 另外,s-maxage的優先級要高於max-age.
[9] no-transform ---- 告知代理,不要更改媒體類型,好比jpg,被你改爲png.安全
Expires -- [iksˈpaiəz] 過時時間
性能優化
Cache-control 用於控制HTTP緩存(在HTTP/1.0中可能部分沒實現,僅僅實現了 Pragma: no-cache)
Expires 表示存在時間,容許客戶端在這個時間以前不去檢查(發請求),等同max-age的效果。可是若是同時存在,則被Cache-Control的max-age覆蓋。 ---- Expires [iksˈpaiəz] 過時時間服務器
格式:Expires Tue, 02 Jan 2018 03:44:20 GMT網絡
Content-Encoding 是HTTP協議的響應報文頭 -----Encoding [ɪn'kəʊdɪŋ] 編碼模式
通常形式如:Content-Encoding:gzip,deflate,compress
Content-Type
MediaType,便是Internet Media Type,互聯網媒體類型;也叫作MIME類型,在Http協議消息頭中,使用Content-Type來表示具體請求中的媒體類型信息。
例如: Content-Type: text/html;charset:utf-8;
常見的媒體格式類型以下:
text/html : HTML格式
text/plain :純文本格式
text/xml : XML格式
image/gif :gif圖片格式
image/jpeg :jpg圖片格式
image/png:png圖片格式
以application開頭的媒體格式類型: ---- application [ˌæplɪˈkeɪʃn] 應用
application/xhtml+xml :XHTML格式
application/xml : XML數據格式
application/atom+xml :Atom XML聚合格式
application/json : JSON數據格式
application/pdf :pdf格式
application/msword : Word文檔格式
application/octet-stream : 二進制流數據(如常見的文件下載)
application/x-www-form-urlencoded : <form encType=」」>中默認的encType,form表單數據被編碼爲key/value格式發送到服務器(表單默認的提交數據的格式)
Date:Date頭域表示消息發送的時間,緩存在評估響應的新鮮度時要用到,時間的描述格式由RFC822定義。例如,Date: Thu, 11 Jul 2015 15:33:24 GMT。
Age:當代理服務器用本身緩存的實體去響應請求時,用該頭部代表該實體從產生到如今通過多長時間了。例如,Age:147 (秒)
Last-modified 文件在服務器端最後被修改的時間 ---- Last 最後一個 modified ['mɒdɪfaɪd] 修改日期
例如:Last-Modified: Mon, 25 Dec 2017 05:44:15 GMT
更新原理:
一、在瀏覽器首次請求某個資源時,服務器端返回的狀態碼是200 (ok),內容是你請求的資源,同時有一個Last-Modified的屬性標記(Reponse Header),標識此文件在服務期端最後被修改的時間,格式:Last-Modified:Tue, 24 Feb 2009 08:01:04 GMT
二、瀏覽器第二次請求該資源時,根據HTTP協議的規定,瀏覽器會向服務器傳送If-Modified-Since報頭(Request Header),詢問該文件是否在指定時間以後有被修改過,格式爲:If-Modified-Since:Tue, 24 Feb 2009 08:01:04 GMT
三、若是服務器端的資源沒有變化,則服務器返回304狀態碼(Not Modified),內容爲空,這樣就節省了傳輸數據量。當服務器端代碼發生改變,則服務器返回200狀態碼(ok),內容爲請求的資源,和第一次請求資源時相似。從而保證在資源沒有修改時不向客戶端重複發出資源,也保證當服務器有變化時,客戶端可以及時獲得最新的資源。
Transfer-Encoding(傳輸編碼): chunked ----chunked [tʃɪŋkt] 龜裂的
表示輸出的內容長度不能肯定,普通的靜態頁面、圖片之類的基本上都用不到這個。
但動態頁面就有可能會用到,但我也注意到大部分asp,php,asp.net動態頁面輸出的時候大部分仍是使用Content-Length,沒有使用Transfer-Encoding: chunked。
不過若是結合:Content-Encoding: gzip 使用的時候,Transfer-Encoding: chunked仍是比較有用的。
Vary (標頭):Accept-Encoding ---- Vary [ˈveəri] 變化 accept [əkˈsept] 接受
性能優化裏有一項叫指定「Vary:Accept-Encoding」標頭,用一句話來講明它的意義,就是「告訴代理服務器緩存兩種版本的資源:壓縮和非壓縮,這有助於避免一些公共代理不能正確地檢測Content-Encoding標頭的問題 設想有兩個客戶,一個使用的舊瀏覽器不支持壓縮,一個使用新的瀏覽器支持壓縮,若是他們都請求同一個網頁,那麼取決於誰先請求,壓縮或非壓縮版本便存儲在CDN上。這樣問題就出現了,舊瀏覽器請求常規網頁但得到緩存的壓縮版本,而新瀏覽器會得到緩存的非壓縮版本但嘗試去「解壓」它。不管哪一種方式都是壞消息。解決方法是,源服務器回送「Vary: Accept-Encoding」。
如今的中間CDN會存儲獨立的緩存條目,一個是Accept-encoding: gzip ,而若是你沒有發送header,則存儲另外一個。
標頭「Vary:Accept-Encoding」指定方法
如今的新瀏覽器都支持壓縮了,所以若是網站啓用了GZip,能夠無需再指定「Vary: Accept-Encoding」標頭,不過指定「Vary: Accept-Encoding」標頭會有更高的保險,而它並不須要你額外的開銷,爲何不指定呢?
X-UA-Compatible ----Compatible [kəmˈpætəbl] 兼容
X-UA-Compatible是自從IE8新加的一個設置,對於IE8如下的瀏覽器是不識別的。 經過在meta中設置X-UA-Compatible的值,能夠指定網頁的兼容性模式設置。
在網頁中指定的模式優先權高於服務器中(經過HTTP Header)所指定的模式。 兼容性模式設置優先級
經常使用的例子:
<meta http-equiv="X-UA-Compatible" content="IE=7">
X-Firefox-Spdy
<---請求頭--->
Accept 屬於請求頭
1. Accept屬於請求頭, Content-Type屬於實體頭。
Http報頭分爲通用報頭,請求報頭,響應報頭和實體報頭。
請求方的http報頭結構:通用報頭|請求報頭|實體報頭
響應方的http報頭結構:通用報頭|響應報頭|實體報頭
2. Accept表明發送端(客戶端)但願接受的數據類型。
好比:Accept:text/xml;
表明客戶端但願接受的數據類型是xml類型
3. Content-Type表明發送端(客戶端|服務器)發送的實體數據的數據類型。
好比:Content-Type:text/html;
表明發送端發送的數據格式是html。
請求報頭容許客戶端向服務器端傳遞請求的附加信息以及客戶端自身的信息。
經常使用的請求報頭
Accept ----Accept [əkˈsept] 接收
Accept請求報頭域用於指定客戶端接受哪些類型的信息。eg:Accept:image/gif,代表客戶端但願接受GIF圖象格式的資源;Accept:text/html,代表客戶端但願接受html文本。
Accept-Charset -----Charset [t'ʃɑ:set] 編碼格式
Accept-Charset請求報頭域用於指定客戶端接受的字符集。eg:Accept-Charset:iso-8859-1,gb2312.若是在請求消息中沒有設置這個域,缺省是任何字符集均可以接受。
Accept-Encoding -----Encoding [ɪn'kəʊdɪŋ] 字符編碼
Accept-Encoding請求報頭域相似於Accept,可是它是用於指定可接受的內容編碼。eg:Accept-Encoding:gzip.deflate.若是請求消息中沒有設置這個域服務器假定客戶端對各類內容編碼均可以接受。
Accept-Language ----Language [ˈlæŋgwɪdʒ] 語種
Accept-Language請求報頭域相似於Accept,可是它是用於指定一種天然語言。eg:Accept-Language:zh-cn.若是請求消息中沒有設置這個報頭域,服務器假定客戶端對各類語言均可以接受。
Authorization
Authorization請求報頭域主要用於證實客戶端有權查看某個資源。當瀏覽器訪問一個頁面時,若是收到服務器的響應代碼爲401(未受權),能夠發送一個包含Authorization請求報頭域的請求,要求服務器對其進行驗證。
Host(發送請求時,該報頭域是必需的)
Host請求報頭域主要用於指定被請求資源的Internet主機和端口號,它一般從HTTP URL中提取出來的,eg:
咱們在瀏覽器中輸入:http://www.guet.edu.cn/index.html
瀏覽器發送的請求消息中,就會包含Host請求報頭域,以下:
Host:www.guet.edu.cn
此處使用缺省端口號80,若指定了端口號,則變成:Host:www.guet.edu.cn:指定端口號
User-Agent
咱們上網登錄論壇的時候,每每會看到一些歡迎信息,其中列出了你的操做系統的名稱和版本,你所使用的瀏覽器的名稱和版本,這每每讓不少人感到很神奇,實際上,服務器應用程序就是從User-Agent這個請求報頭域中獲取到這些信息。User-Agent請求報頭域容許客戶端將它的操做系統、瀏覽器和其它屬性告訴服務器。不過,這個報頭域不是必需的,若是咱們本身編寫一個瀏覽器,不使用User-Agent請求報頭域,那麼服務器端就沒法得知咱們的信息了。
請求報頭舉例:
GET /form.html HTTP/1.1 (CRLF)
Accept:image/gif,image/x-xbitmap,image/jpeg,application/x-shockwave-flash,application/vnd.ms-excel,application/vnd.ms-powerpoint,application/msword,*/* (CRLF)
Accept-Language:zh-cn (CRLF)
Accept-Encoding:gzip,deflate (CRLF)
If-Modified-Since:Wed,05 Jan 2007 11:21:25 GMT (CRLF)
If-None-Match:W/"80b1a4c018f3c41:8317" (CRLF)
User-Agent:Mozilla/4.0(compatible;MSIE6.0;Windows NT 5.0) (CRLF)
Host:www.guet.edu.cn (CRLF)
Connection:Keep-Alive (CRLF)
(CRLF)
Cookie
Cookie是用於維持服務端會話狀態的,一般由服務端寫入,在後續請求中,供服務端讀取。Host
Host:客戶端指定本身想訪問的http服務器的域名/IP 地址和端口號。If-Modified-Since ----Since [sɪns] 自從; 既然; 由於; 以來
格式:If-Modified-Since Mon, 25 Dec 2017 05:08:41 GMT (304狀態下能看到這個頭)
If-Modified-Since是標準的HTTP請求頭標籤,在發送HTTP請求時,把瀏覽器端緩存頁面的最後修改時間一塊兒發到服務器去,服務器會把這個時間與服務器上實際文件的最後修改時間進行比較。若是時間一致,那麼返回HTTP狀態碼304(不返回文件內容),客戶端接到以後,就直接把本地緩存文件顯示到瀏覽器中。若是時間不一致,就返回HTTP狀態碼200和新的文件內容,客戶端接到以後,會丟棄舊文件,把新文件緩存起來,並顯示到瀏覽器中。