1. 程式人生 > >Http協議(續)

Http協議(續)

請求頭

(1)Accept

用於指定客戶端能夠處理的MIME型別,如Accept:text/html,image/*

(2)Accept-Charset

用於指出客戶端程式可以使用的字符集。

(3)Accept-Encoding

用於指定客戶端能夠進行解碼的資料編碼方式,通常指某種壓縮方式

(4)Accept-Language

用於指定客戶端期望伺服器返回那個國家語言的文件。可以指定多個國家的語言。

(5)Authorization

當客戶端訪問口令受保護的檔案時,伺服器會返回401狀態碼和WWW-Authenticate響應頭,要求客戶端使用Authorization請求頭來應答。WWW-Authenticate響應頭指定了2種認證方式,分別為BASIC和DIGEST。對於BASIC驗證方式,客戶端需要用Base64編碼的方式將使用者名稱和密碼傳送給伺服器如zxx:123456

編碼後傳送應該如:Authorization:Basic enh4OjEyMzQ1Ng==,Base64編碼很容易解碼,相當於明文傳送。如果使用DIGEST驗證方式,伺服器首先向客戶端傳送一些驗證資訊(一個隨機字串)和一個附加資訊(一個指定的值),瀏覽器將這些資訊和使用者名稱,密碼和一些其他資訊(客戶端隨機產生的一個字串)混合後執行MD5演算法,最終將產生的結果和先前的大部分資訊傳送給伺服器,伺服器通過使用者名稱取到儲存的密碼,然後與客戶端一樣執行MD5演算法,比較產生的結果是否與傳過來的結果一致。這種方式提高了安全性。

(6)Expect

用於指定客戶端請求伺服器採取的特殊行動,目前設定值只有100-continue,用於詢問伺服器是否可以在後面請求中傳送一個文件。

(7)From

用於指定請求傳送者的E-mail地址,只被一些特殊的Web客戶端程式使用,瀏覽器不會使用。

(8)Host

用於指定資源所在的主機名與埠號,如果埠號為連線伺服器所使用的埠號,則可以省略,在HTTP1.1中,瀏覽器和其他客戶端傳送的每個請求訊息中必須包含Host請求頭欄位,用於區分虛擬Web站點,哪怕沒有虛擬Web站點,也要設定一個空值。

(9)If-Match

用於檢測網頁內容是否更新,伺服器在傳送檔案內容給客戶端時,可以傳送一些代表實體內容的頭欄位,成為實體標籤,當客戶端再次訪問這個網頁檔案的內容時,使用If-Match欄位附帶以前快取的實體標籤內容,如果客戶端使用的是GET請求,伺服器檢索if-Match欄位裡面的實體標籤,並於當前伺服器代表這個網頁檔案內容的實體標籤進行比較(可以理解為遊戲的客戶端與伺服器的版本號,不一樣就該更新了),一樣則代表網頁內容沒有更改,客戶機使用快取的網頁內容,否則返回新的網頁檔案和新的實體標籤。如果為PUT請求方式,則表示伺服器上的網頁需要更新,依舊判斷標籤是否相等,如果相等則代表網頁檔案沒有更改,客戶端可以更新,如果不一樣則代表網頁檔案已經被修改過,不允許PUT方法成功執行,防止多人維護一個網頁時,產生覆蓋的情況,可以理解為SVN版本管理時產生了衝突。

(10)If-Modified-Since

當伺服器傳送一個網頁檔案給客戶端時,還會將改檔案的最後修改時間等資訊一併傳送,客戶端將這些資訊都快取起來,當客戶端再次請求這個網頁檔案時,將這個最後修改時間和伺服器的最後修改時間進行比較,如果一樣,則表示沒有發生修改,返回狀態碼304表示瀏覽器版本是最新的,如果不一樣,則返回狀態碼200和新的網頁檔案內容,客戶端將舊的快取檔案捨去,儲存新的檔案。

(11)If-None-Match

與If-Match作用相反,只有當伺服器上沒有任何一個資源的Etag屬性值和If-None-Match所列出的項相匹配時,伺服器才會返回資源。

(12)If-Range

If-Range頭欄位伴隨著Range頭欄位一起使用,其值可以是實體標籤或者GMT格式的時間。當值為實體標籤時,與伺服器該檔案的實體標籤比較,若相等,則返回Range頭欄位指定的部分內容,否則返回當前網頁所有內容;當時間為GMT格式時間時,伺服器自從這個時間以來沒有發生過更改,則返回指定部分內容,否則返回當前網頁所有內容。

(13)If-Unmodified-Since

這個欄位一般用於PUT方式,其值為HTTP的GMT時間格式,表示只有伺服器上對應檔案的修改時間比給出的時間早,PUT方式進行,說簡單點就是伺服器的資源是舊的,本地資源要新些,所以要更新伺服器資源。

(14)Max-Forwards

這個頭欄位表示當前請求可以途徑的代理伺服器的數量,每配置一個,值減一,當減為0時還沒有到底最終伺服器,就由當前代理伺服器對客戶見進行最終響應。

(15)Proxy-Authorization

針對代理伺服器的使用者資訊認證。用法與Authorization相同。

(16)Range

指定返回文件中的部分內容,對較大文件的斷點續傳非常有用。如在一次請求中收到部分內同就中斷了,可以在第二次請求中,使用Range要求返回中斷位置以後的內容。Range頭的3種使用格式:<1>Range:bytes=100-599:返回第100個位元組到第599個位元組之間的內容;<2>100-:返回第100個位元組以後的所有內容;<3>-100:返回文件種的最後100個位元組的內容。

(17)Referer

瀏覽器向伺服器發出的請求,可以是在瀏覽器位址列輸入URL,也可以是點選一個超連結,對應使用超連結的情況,瀏覽器傳送Referer頭,可以讓伺服器知道本次請求的起源URL地址。比如,瞭解那些網站的廣告有效這些用處。但不能過分依賴Referer頭欄位,使用者可以使用Telnet這樣的客戶端程式偽造一個Referer頭。

(18)TE

用於指定客戶機可接受的擴充套件傳輸編碼型別(除chunked之外的型別)和使用chunked傳輸編碼型別時是否允許使用Trailer欄位(可以使頭欄位放在實體內容後),即每個chunck分段內容的後面是否允許有頭欄位。可以組合使用"trailers"和允許擴充套件傳輸編碼型別,相互之間用逗號(,)分隔。

(19)User-Agent

User-Agent用於指定瀏覽器的型別和名稱,便於伺服器針對不同的型別的瀏覽器返回不同的內容。

響應頭

(1)Accept-Range

用於說明當前Web伺服器是否接受Range請求和Range請求種指定的資料的單位納。如:(1)Accept-Range:none 不接受Range請求(2)Accept-Range:bytes接受以byte為單位的Range請求。

(2)Age

Age頭欄位用於指出當前網頁文件可以在客戶機或代理伺服器種快取的有效時間,設定值是一個以秒為單位的時間。當客戶機再此訪問快取了的文件時,用當前時間減去上次返回文件時設定的Date頭欄位時間值,與Age值判斷比較。

(3)Etag

用於向客戶機傳送代筆實體內容特徵的標記資訊,這些資訊成為實體標籤,也就是之前說明的請求頭裡面提及的實體標籤。

(4)Location

Location頭欄位用於通知使用者去哪個新地址去獲取文件,以便客戶機自動重新連線到新地址並檢索文件,由於當前並沒有直接返回內容給客戶機,因此響應訊息種不能出現實體內容。訊息頭種不能同時出現Location和Content-Type頭欄位。

(5)Proxy-Authenticate

針對代理伺服器的使用者資訊認證,與WWW-Authenticate頭欄位完全相同。

(6)Retry-After

用於告訴客戶機可以在什麼時間重複發出剛才的請求。

(7)Server

用於指定伺服器軟體的產品名稱。

(8)Vary

用於指定影響了伺服器生成的響應內容的請求頭欄位,如:Vary:Accept-Language

如果上次的Accept-Language為en-gb,而這次為zh-cn,則客戶機依舊不能使用快取,必須向伺服器請求,它作為了一個是否能使用快取的條件。

(9)WWW-Authenticate

聯合請求頭Authorization一起看,前面已經說明過。

實體頭

(1)Allow

用於指定客戶端請求的資源所支援的請求方法,它通常伴隨著405(Method Not Allowed)狀態碼一起使用。

(2)Content-Encoding

用於指定實體內容的壓縮編碼方法。更加Accept-Encoding請求頭來指定。

(3)Content-Language

用於指定返回的網頁文件的國家語言型別。

(4)Content-Length

用於指定響應實體內容的長度,在持續性連線非chunked編碼時必不可少,用於區分上一個響應的結束與下一個響應的開始。只有POST,DELETE,PUT有實體內容。

(5)Content-Location

用於指定響應訊息種所封裝的實體內容的實際位置路徑。不能簡單地認為響應訊息中實體內容的位置路徑就是請求資源的路徑。

(6)Content-MD5

用於指定實體內容的MD5演算法算出的數字摘要的base64編碼的結果。保證實體內容在網路傳輸中意外損壞的檢查,但並不能防止黑客的惡意攻擊。簡單來說,伺服器傳送前,算一次,客戶機接受後,算一次,然後比較。

(7)Content-Range

用於指定伺服器返回的部分實體內容的位置資訊,只有客戶機使用了Range請求頭要求伺服器返回實體的部分內容時,伺服器的響應頭才包含Content-Range。如:Content-Range:bytes 2543-4532/7898:從2543位元組到4532位元組,整體大小為7898位元組。

(8)Content-Type

瀏覽器接受到的資料都是一堆二進位制資料,伺服器通過這個欄位告訴瀏覽器接受到的實體內容代表哪種格式的資料。客戶端可以通過Content-Type知道型別,而伺服器讀取的檔案通常在本地磁碟上讀取,它知道這個檔案的MIME型別是通過Web.xml配置的,一個副檔名與一個MIME型別對應,如下格式:

如果Content-Type沒有設定響應內容所使用的字符集編碼,則預設使用ISO-8859-1(Latin)編碼。

(9)Expires

用於指定當前文件在什麼時候過期,必須設定為GMT格式,如果格式不正確,特別是乾脆設定為“0”時,客戶端認為當前網頁已過期,有些舊的瀏覽器對Pragam頭欄位支援不可靠,又不能識別Cache-Control,因此使用Expires。

(10)Last-Modified

用於指定文件的最後更改時間,值為GMT格式。

擴充套件頭

(1)Refresh

  • <1>Refresh:1 瀏覽器1秒後重新整理頁面
  • <2>Refresh:1;url=...... 瀏覽器1秒後跳轉到其他網頁

(2)Content-Disposition

如果瀏覽器不直接處理響應的實體內容,而是讓使用者選擇將響應的實體內容儲存到一個檔案中,則需要使用這個Content-Disposition頭欄位,指定接收程式如何處理資料內容,有2種方式,inline和attachmnet,inline表示直接處理,attachmnet要求使用者干預並控制接收程式如何處理,只有attachmnet為標準方式。如果指定為attachmnet,後面還可以指定filename引數,不要目錄,直接給檔名,設定之前必須指定Content-Type頭欄位。如下: