一. HTTP請求
HTTP請求是由客戶端發出的消息,用來使服務器執行動作.發出的消息包括起始行,Headers,Body.
起始行
起始行包含三個元素:
- HTTP方法
一個動詞(像GET,PUT或者POST)或者一個名詞(想HEAD或者OPTIONS),用來描述要執行的動作.例如,GET表示要獲取資源,POST表示向服務器推送數據等. - 請求目標
- 請求目標,通常是一個URL,或者是協議,端口和域名的絕對路徑.
- 請求的各式會根據不同的HTTP方法而異,可以是:
- 一個絕對路徑,末尾跟上一個'?'和查詢字符串,這種形式成為原始形式,通常被GET,POST,HEAD和OPTIONS方法所使用.
POST / HTTP 1.1
GET /background.png HTTP/1.0
HEAD /test.html?query=alibaba HTTP/1.1
OPTIONS /anypage.html HTTP/1.0
* 一個完整的URL,被稱為絕對形式,主要在GET連接到代理時使用.
GET http://developer.mozilla.org/en-US/docs/Web/HTTP/Messages HTTP/1.1
* 由域名和可選端口(以':'為前綴)組成的URL的authority component,稱為authority form,僅在使用CONNECT簡歷HTTP隧道時才使用.
CONNECT developer.mozilla.org:80 HTTP/1.1
* 星號形式(asterisk form),一個簡單的星號("*").配合OPTIONS方法使用,代表整個服務器.
OPTIONS * HTTP/1.1
- HTTP版本(HTTP version),定義了剩余報文的結構
Headers
請求的HTTP headers遵循和HTTP header相同的基本結構:不區分大小寫的字符串,緊跟着的冒號(':')和一個結構取決於header的值.整個header(包括值)由一行組成.
- 請求頭可以分為很多組:
- General headers:例如Via,適用於整個報文.
- Request headers:例如User-Agent,Accept-Type等
- Entity headers:例如Content-Length,適用於請求的body.
Body
請求的最后一部分是它的body,不是所有的請求都有一個body,如GET,HEAD,DELETE和OPTIONS等獲取資源的請求,通常不需要body.有些類似於POST請求將數據發送到服務器以更新數據的請求,就會需要body.
- Body可以分為兩類:
- Single-resource bodies:由一個單文件組成.該類型body由兩個header定義:Content-Type和Content-Length.
- Multiple-resource bodyies:由多部分組成,每一部分包含不同的信息位.
二. HTTP響應
狀態行
HTTP響應的起始行被稱作狀態行,包含以下信息:
- 協議版本:通常為HTTP/1.1
- 狀態碼(status code):表明請求是成功或失敗.常見的成功碼有200,201,300等,失敗碼有400,401,500等.
- 狀態文本(status text):一個簡短的,純粹的信息,通過狀態碼的文本描述,幫助人們解讀HTTP消息.
典型的狀態碼:HTTP/1.1 404 Not Found。
Headers
響應的HTTP headers和其他header相同的結構:不區分大小寫的字符串,緊跟着的冒號(':')和一個結構取決於header類型的值.
- 響應頭可以分為幾組:
- General headers:例如Via,適用於整個報文.
- Request headers:例如Vary和Accept-Ranges,提供其他不符合狀態行的關於服務器的信息.
- Entity headers:例如Content-Length,適用於請求的body.如果請求中沒有任何的body,則不會發送這類的頭文件
Body
響應最后一部分是body,不是所有的響應都有body,具有狀態碼(如201或204)的響應,通常不會有body.
- Body可分為三類:
- Single-resource bodies:由已知長度的單個文件組成.該類型body由兩個header定義:Content-Type和Content-Length.
- Single-resourcebodies:由未知長度的單個文件組成,通過將Transfer-Encoding設置為chunked來使用chunks編碼.
- Multiple-resource bodies:由多部分body組成,每部分包含不同的信息段.