HTTP內容格式詳細說明(協議)

來源:互聯網
上載者:User

HTTP訊息由用戶端到伺服器的請求和伺服器到用戶端的回應群組成。請求訊息和響應訊息都是由開始行(對於請求訊息,開始行就是請求行,對於響應訊息,開始行就是狀態行),訊息前序,空行(只有CRLF的行),訊息本文(可選)組成。

HTTP訊息前序包括通用前序、請求前序、響應前序、實體前序。每一個前序域都是由名字+“:”+空格+值組成,訊息前序域的名字是大小寫無關的。

1       請求訊息格式

HTTP請求內容由三部分組成:請求行、訊息頭(前序)、可選的請求本文(資訊體)

1.1    請求行格式:

請求行必須是放在所有內容的最前面,並且必須以換行斷行符號符結束,格式如下:

Method<空格>Request-URI<空格>HTTP/Version<換行斷行符號符>

1.2    Method:

表示對於Request-URI完成的方法,這個欄位是大小寫敏感的,有OPTIONS、GET、HEAD、POST、PUT、DELETE、 TRACE。方法GET和HEAD應該被所有的通用WEB伺服器支援,其他所有方法的實現是可選的。GET方法取回由Request-URI標識的資訊。 HEAD方法也是取回由Request-URI標識的資訊,只是可以在響應時,不返回訊息體。POST方法可以請求伺服器接收包含在請求中的實體資訊,可以用於提交表單,發送訊息等

1.3    Request-URI:

遵循URI格式,在此欄位為星號(*)時,說明請求並不用於某個特定的資源地址,而是用於伺服器本身

1.4    HTTP/Version

表示支援的HTTP版本,例如為HTTP/1.1。CRLF表示換行斷行符號符。

2       響應訊息格式

HTTP響應內容也是由三個部分組成:響應(狀態)行、訊息前序、響應本文,響應行必須是放在所有內容的最前面,並且必須以換行斷行符號符結束

2.1    響應行格式:

HTTP/Version<空格>Status-Code<空格>Reason-Phrase<換行斷行符號符>

2.2    HTTP/Version

表示支援的HTTP版本,例如為HTTP/1.1。

2.3    Status- Code

是一個三位元字組成的結果代碼(狀態代碼)。Status-Code的第一個數字定義響應的類別,後兩個數字沒有分類的作用。第一個數字可能取5個不同的值:

1xx:資訊響應類,表示接收到請求並且繼續處理

2xx:處理成功響應類,表示動作被成功接收、理解和接受

3xx:重新導向響應類,為了完成指定的動作,必須接受進一步處理

4xx:用戶端錯誤,客戶請求包含語法錯誤或者是不能正確執行

5xx:服務端錯誤,伺服器不能正確執行一個正常的請求

 

常見狀態碼、狀態原因、說明:

200 OK       //用戶端請求成功

400 Bad Request   //用戶端請求有語法錯誤,不能被伺服器所理解

401 Unauthorized //請求未經授權,這個狀態碼必須和WWW-Authenticate報 頭域一起使用

403 Forbidden   //伺服器收到請求,但是拒絕提供服務

404 Not Found   //請求資源不存在,eg:輸入了錯誤的URL

500 Internal Server Error //伺服器發生不可預期的錯誤

503 Server Unavailable   //伺服器當前不能處理用戶端的請求,一段時間後,可能恢複正常

2.4    Reason-Phrase

狀態原因,主要用於協助使用者理解。

3       通用頭域

通用頭域包含請求和響應訊息都支援的頭域,通用頭域包含Cache-Control、 Connection、Date、Pragma、Transfer-Encoding、Upgrade、Via。對通用頭域的擴充要求通訊雙方都支援此擴充,如果存在不支援的通用頭域,一般將會作為實體頭域處理。

3.1     Cache-Control 頭域

Cache -Control指定請求和響應遵循的緩衝機制。在請求訊息或響應訊息中設定 Cache-Control並不會修改另一個訊息處理過程中的緩衝處理過程。請求時的緩衝指令(值)包括no-cache、no-store、max-age、 max-stale、min-fresh、only-if-cached,響應訊息中的指令包括public、private、no-cache、no-
store、no-transform、must-revalidate、proxy-revalidate、max-age。各個訊息中的指令含義如下:

Public:指示響應可被任何緩衝區緩衝。

Private:指示對於單個使用者的整個或部分響應訊息,不能被共用快取處理。這允許伺服器僅僅描述當使用者的部分響應訊息,此響應訊息對於其他使用者的請求無效。

no-cache:指示請求或響應訊息不能緩衝

no-store:用於防止重要的資訊被無意的發布。在請求訊息中發送將使得請求和響應訊息都不使用緩衝。

max-age:指示客戶機可以接收生存期不大於指定時間(以秒為單位)的響應。

min-fresh:指示客戶機可以接收回應時間小於目前時間加上指定時間的響應。

max-stale:指示客戶機可以接收超出逾時期間的響應訊息。如果指定max-stale訊息的值,那麼客戶機可以接收超出逾時期指定值之內的響應訊息。

3.2     Date 頭域

Date頭域表示訊息發送的時間,時間的描述格式由rfc822定義。例如,Date:Mon,31Dec200104:25:57GMT。Date描述的時間表示世界標準時,如果換算成本地時間,需要知道使用者所在的時區。

3.3      Pragma 頭域

Pragma頭域用來包含實現特定的指令,最常用的是Pragma:no-cache。在HTTP/1.1協議中,它的含義和Cache- Control:no-cache相同。

3.4    Range頭域

Range頭域可以請求實體的一個或者多個子範圍。例如:

表示頭500個位元組:bytes=0-499

表示第二個500位元組:bytes=500-999

表示最後500個位元組:bytes= -500

表示500位元組以後的範圍:bytes=500-

第一個和最後一個位元組:bytes=0-0,-1

同時指定幾個範圍:bytes=500-600,601-999

但是伺服器可以忽略此要求標頭,如果無條件GET包含Range要求標頭,響應會以狀態代碼206(PartialContent)返回而不是以200 (OK)。

4       要求標頭域:

允許用戶端向伺服器傳遞關於請求或者關於客戶機的附加。要求標頭域可能包含下欄欄位Accept、Accept-Charset、Accept- Encoding、Accept-Language、Authorization、From、Host、If-Modified-Since、If- Match、If-None-Match、If-Range、If-Range、If-Unmodified-Since、Max-Forwards、 Proxy-Authorization、Range、Referer、User-Agent。對要求標頭域的擴充,要求通訊雙方都支援,如果存在不支援的要求標頭域,一般將會作為實體頭域處理。

4.1     Host頭域

Host頭域指定請求資源的Intenet主機和連接埠號碼,必須表示請求url的原始伺服器或網關的位置。HTTP/1.1請求必須包含主機頭域,否則系統會以400狀態代碼返回。

4.2     Referer頭域

Referer 頭域允許用戶端指定請求uri的源資源地址,這可以允許伺服器產生回退鏈表,可用來登陸、最佳化cache等。也允許廢除的或錯誤的串連由於維護的目的被追蹤。如果請求的uri沒有自己的uri地址,Referer不能被發送。如果指定的是部分uri地址,則此地址應該是一個相對位址。

4.3      User-Agent 頭域

User-Agent頭域的內容包含發出請求的使用者資訊。

5        請求訊息頭樣本:

GET http://www.ebdoor.com:80/ HTTP/1.0

Host: www.ebdoor.com

Accept:*/*

Pragma: no-cache

Cache-Control: no-cache

Referer: http://www.ebdoor.com/

User-Agent:Mozilla/4.0(…)

Range:bytes=554554-

 

訊息體….

 

上例第一行表示HTTP用戶端(可能是瀏覽器、下載程式)通過GET方法獲得指定URL下的檔案。綠色的部分表示要求標頭域的資訊,蘭色的部分表示通用頭部分。

6       回應標頭域

回應標頭域允許伺服器傳遞不能放在狀態行的附加資訊,這些域主要描述伺服器的資訊和 Request-URI進一步的資訊。回應標頭域包含Age、Location、Proxy-Authenticate、Public、Retry- After、Server、Vary、Warning、WWW-Authenticate。對回應標頭域的擴充要求通訊雙方都支援,如果存在不支援的回應標頭域,一般將會作為實體頭域處理。

6.1    Location回應標頭域

Location回應標頭用於重新導向接收者到一個新URI地址。

6.2    Server回應標頭域

Server回應標頭包含處理請求的原始伺服器的軟體資訊。此域能包含多個產品標識和注釋,產品標識一般按照重要性排序。

7       實體內容

指在頭域結束空行後的所有內容,請求訊息和響應訊息都可以包含實體資訊,實體可以是一個經過編碼的位元組流,它的編碼方式由實體頭域中的Content-Encoding或Content-Type定 義,它的長度由Content-Length或Content-Range定義。

8       實體頭域

       實體頭域描述實體的資訊,實體頭包括Allow、Content- Base、Content-Encoding、Content-Language、 Content-Length、Content-Location、Content-MD5、Content-Range、Content-Type、 Etag、Expires、Last-Modified、extension-header。extension-header,允許用戶端定義新的實體頭,但是這些域可能無法被接受方識別。

8.1    Content-Type實體頭

Content-Type實體頭用於向接收方指示實體的介質類型,指定HEAD方法送到接收方的實體介質類型,或GET方法發送的請求介質類型 Content-Range實體頭

8.2    Content-Range

指示了整個實體的長度。在伺服器向客戶返回一個部分響應,它必須描述響應覆蓋的範圍和整個實體長度。一般格式:

 Content-Range:bytes-unit<空格>first-byte-pos-last-byte-pos/entity-legth

 例如,傳送頭500個位元組次欄位的形式:Content-Range:bytes0- 499/1234如果一個http訊息包含此節(例如,對範圍請求的響應或對一系列範圍的重疊請求),Content-Range表示傳送的範圍,

8.3    Content-Length

表示實際傳送的位元組數。只有當瀏覽器使用持久HTTP串連時才需要這個資料。如果你想要利用持久串連的優勢,可以把輸出文檔寫入 ByteArrayOutputStram,完成後查看其大小,然後把該值放入Content-Length頭,最後通過 byteArrayStream.writeTo(response.getOutputStream()發送內容。

8.4    Allow

伺服器支援哪些要求方法(如GET、POST等)。

8.5    Content-Encoding

文檔的編碼(Encode)方法。只有在解碼之後才可以得到Content-Type頭指定的內容類型。利用gzip壓縮文檔能夠顯著地減少HTML文檔的 下載時間。Java的GZIPOutputStream可以很方便地進行gzip壓縮,但只有Unix上的Netscape和Windows上的IE 4、IE 5才支援它。因此,Servlet應該通過查看Accept-Encoding頭(即request.getHeader("Accept- Encoding"))檢查瀏覽器是否支援gzip,為支援gzip的瀏覽器返回經gzip壓縮的HTML頁面,為其他瀏覽器返回普通頁面。

8.6      Expires

一個條件GET,只有改動時間遲於指定時間的文檔才會返回,否則返回一個304(Not Modified)狀態。應該在什麼時候認為文檔已經到期,從而不再緩衝它。

9       響應訊息樣本:

HTTP/1.0 200 OK

Date:Mon,31Dec200104:25:57GMT

Server:Apache/1.3.14(Unix)

Content-type:text/html

Last-modified:Tue,17Apr200106:46:28GMT

Content-length:4359

Content-range:bytes554554-40279979/40279980

 

響應訊息體…

 

上例第一行表示HTTP服務端響應一個GET方法。綠色的部分表示回應標頭域的資訊,蘭色的部分表示通用頭部分,紅色的部分表示實體頭域的資訊。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.