#HTTP經常使用響應頭詳解html
這是請求oschina首頁時的響應信息: 瀏覽器
理論上全部的響應頭信息都應該是迴應請求頭的。可是服務端爲了效率,安全,還有其餘方面的考慮,會添加相對應的響應頭信息,從上圖能夠看到:緩存
- Cache-Control:must-revalidate, no-cache, private。這個值告訴客戶端,服務端不但願客戶端緩存資源,在下次請求資源時,必需要重新請求服務器,不能從緩存副本中獲取資源。 Cache-Control是響應頭中很重要的信息,當客戶端請求頭中包含Cache-Control:max-age=0請求,明確表示不會緩存服務器資源時,Cache-Control做爲做爲迴應信息,一般會返回no-cache,意思就是說,「不緩存就不緩存唄」;當客戶端在請求頭中沒有包含Cache-Control時,服務端每每會定,不一樣的資源不一樣的緩存策略,好比說oschina在緩存圖片資源的策略就是Cache-Control:max-age=86400,這個意思是,從當前時間開始,在86400秒的時間內,客戶端能夠直接從緩存副本中讀取資源,而不須要向服務器請求。
- Connection:keep-alive,這個字段做爲迴應客戶端的Connection:keep-alive,告訴客戶端服務器的tcp鏈接也是一個長鏈接,客戶端能夠繼續使用這個tcp鏈接發送http請求。關於長鏈接的更多知識,後面我再詳細講。
- Content-Encoding:gzip,告訴客戶端,服務端發送的資源是採用gzip編碼的,客戶端看到這個信息後,應該採用gzip對資源進行解碼。
- Content-Type:text/html;charset=UTF-8,告訴客戶端,資源文件的類型,還有字符編碼,客戶端經過utf-8對資源進行解碼,而後對資源進行html解析。一般咱們會看到有些網站是亂碼的,每每就是服務器端沒有返回正確的編碼。
- Date:Sun, 21 Sep 2014 06:18:21 GMT,這個是服務端發送資源時的服務器時間,剛開始我不知道GMT是格林尼治所在地的標準時間,覺得是服務器的時間錯了,還去服務器上查看過期間。http協議中發送的時間都是GMT的,這主要是解決在互聯網上,不一樣時區在相互請求資源的時候,時間混亂問題。
- Expires:Sun, 1 Jan 2000 01:00:00 GMT,這個響應頭也是跟緩存有關的,告訴客戶端在這個時間前,能夠直接訪問緩存副本,很顯然這個值會存在問題,由於客戶端和服務器的時間不必定會都是相同的,若是時間不一樣就會致使問題。因此這個響應頭是沒有Cache-Control:max-age=***這個響應頭準確的,由於max-age=date中的date是個相對時間,不只更好理解,也更準確。
- Pragma:no-cache,這個含義與Cache-Control等同。
- Server:Tengine/1.4.6,這個是服務器和相對應的版本,只是告訴客戶端服務器信息,沒有更多的意思。
- Transfer-Encoding:chunked,這個響應頭告訴客戶端,服務器發送的資源的方式是分塊發送的。通常分塊發送的資源都是服務器動態生成的,在發送時還不知道發送資源的大小,因此採用分塊發送,每一塊都是獨立的,獨立的塊都能標示本身的長度,最後一塊是0長度的,當客戶端讀到這個0長度的塊時,就能夠肯定資源已經傳輸完了。
- Vary: Accept-Encoding,告訴緩存服務器,緩存壓縮文件和非壓縮文件兩個版本,如今這個字段用處並不大,由於如今的瀏覽器都是支持壓縮的。
上面講述了訪問oschina時,服務器端發送回來的響應頭信息,可是卻並不全,下面這些也是經常會出現的,都很重要:安全
- Content-leng:資源長度,若是服務器響應頭中沒有Transfer-Encoding:chunked,也就是說若是資源不是分塊傳輸的,那麼這個字段就是必須的,由於若是服務器端不告訴客戶端資源的長度,那麼在Connection:keep-alive,也就是說客戶端與服務器端是長鏈接時,客戶端就沒法肯定資源在何時結束。因此這個響應頭對於靜態資源時必須的。
- Content-Range:告訴客戶端,此次發送的是資源的哪部門字節,一般值爲 :bytes 100-1000 /5000。
- Cookie:用於標識客戶端,跟蹤客戶端,存儲用戶信息、用戶行爲。
- Location:服務端將資源的真實目的地放在這個響應頭中,引導客戶端重定向到這個地址去,若是服務器返回302,那麼這個值是必須的,一般這個值是一個完整的url:www.oschina.net。
- WWW-Authenticate:這個字段主要用在服務器資源是有訪問限制的,一般客戶端在訪問服務器資源時,服務器會返回401,要求客戶端發送認證信息,同時會告訴客戶端如何將認證信息編碼。這個響應頭的值就是存儲服務器告訴客戶端編碼的方式,一般是Basic-64編碼。