不管是請求消息仍是響應消息都由4個部分組成:首行、首部字段行區、空行、消息主題。html
通常由一個請求行
、0到多個首部字段行
、一個空行
、消息主體
構成服務器
GET /hello.htm HTTP/1.1 User-Agent: Mozilla/4.0 (compatible; MSIE5.01; Windows NT) Host: example.com Accept-Language: en-us Accept-Encoding: gzip, deflate
包含:請求方法
、資源標識符
、HTTP版本
性能
經常使用請求方法包括:GET、POST、HEAD、PUT、DELETE、CONNECT、OPTIONS、TRACE代理
GET
: 表示我要請求一個指定名稱的資源。PUT
: 表示若是指定URL不存在就建立它,不然就修改它。資源數據由消息主體提供。POST
: 表示要建立一個新的子資源,或者更新一個存在的資源。資源數據由消息主體提供。DELETE
: 表示我要刪除一個指定名稱的資源。OPTIONS
: 容許客戶端查看服務器的性能。 HEAD
: 只請求頁面的首部。TRACE
: 請求服務器在響應中的實體主體部分返回所獲得的內容。 code
PUT和POST區別:
PUT是冪等性
的,而POST不具有冪等性;體如今若是你重複一次提交POST建立子資源的請求,會致使建立兩個子資源,而PUT在第二次重複提交時,只是更新子資源而已。htm
能夠用來傳遞客戶端的更多信息,以及傳遞解析消息主題的必要信息。對象
User-Agent: Mozilla/4.0 (compatible; MSIE5.01; Windows NT) Host: example.com Accept-Language: en-us Accept-Encoding: gzip, deflate
左邊稱爲頭字段名
,右邊稱爲頭字段值
ip
指示頭字段區已完成,消息主體開始(若是有消息主體的話)資源
好比POST提交表單時,表單數據會打包在消息主體內。文檔
不管是請求消息仍是響應消息,都有一個可選的消息主體(message-body)。若是客戶端在提交表單,那麼請求消息主體內就能夠放置表單的數據;若是客戶端請求下載一個gif,那麼響應消息主體內就能夠放置gif文件的二進制字節集合。因此,消息主體內能夠放置任何內容。它的定義也是如此:
message-body = *OCTET
OCTET
就是字節。而 *OCTET
則標示爲多個字節。 僅僅看*OCTET
是沒法知道其中究竟是什麼內容。這就須要在消息頭字段內用一組頭字段來標示它。好比Content-Type
就會指示內容的類型。下圖列出可做爲消息主體限定的首部字段清單。
entity-header = Content-Encoding | Content-Language | Content-Length | Content-Location | Content-MD5 | Content-Range | Content-Type | Allow | Expires | Last-Modified | extension-header extension-header = message-header#response(OK)
Content-Type
實體中所承載對象的類型。Content-Length
所傳送實體主體的長度或大小。Content-Language
與所傳送對象最相配的人類語言。Content-Encoding
對象數據所作的壓縮格式。Content-Location
一個備用位置,請求時可經過它得到對象。Content-Range
說明它是總體的哪一個部分。Content-MD5
實體主體內容的校驗和。Last-Modified
所傳輸內容在服務器上建立或最後修改的日期時間。Expires
實體數據將要失效的日期時間。Allow
該資源所容許的各類請求方法,例如,GET 和 HEAD。ETag
這份文檔的惟一驗證碼。由一個狀態行
、一個或者多個首部字段行
、一個空行
、消息主體
構成
HTTP/1.1 200 OK Date: Mon, 27 Jul 2009 12:28:53 GMT Server: Apache/2.2.14 (Win32) Last-Modified: Wed, 22 Jul 2009 19:15:56 GMT Content-Length: 88 Content-Type: text/html Connection: Closed <html> <body> <h1>Hello, World!</h1> </body> </html>
由http版本
、狀態碼
、狀態描述文字
構成。
狀態碼共5組,分別是 100-199,200-299,300-399,400-499,500-599的範圍。
200-299
成功。 指明客戶端請求是正確的,並被成功執行。300-399
重定向。指明客戶端請求是正確的,不過當前請求資源的位置在別處,請再次定向你的資源位置,發起新的請求。400-499
客戶端錯誤。 指明客戶端的請求是不正確的,多是格式沒法識別,或者URL太長等等。500-599
服務器端錯誤。 指明客戶端的請求正確,可是服務器由於自身緣由沒法完成請求。100-199
信息提示。 這個系列的狀態碼只有2個,可是比較費解,會專門單獨的作出解釋。詳細:
① 客戶方錯誤 100
繼續 101
交換協議
② 成功 200
OK 201
已建立 202
接收 203
非認證信息 204
無內容 205
重置內容 206
部份內容
③ 重定向 300
多路選擇 301
永久轉移 302
暫時轉移 303
參見其它 304
未修改(Not Modified) 305
使用代理
④ 客戶方錯誤 400
錯誤請求(Bad Request) 401
未認證 402
須要付費 403
禁止(Forbidden) 404
未找到(Not Found) 405
方法不容許 406
不接受 407
須要代理認證 408
請求超時 409
衝突 410
失敗 411
須要長度 412
條件失敗 413
請求實體太大 414
請求URI太長 415
不支持媒體類型
⑤ 服務器錯誤 500
服務器內部錯誤 501
未實現(Not Implemented) 502
網關失敗 504
網關超時 505
HTTP版本不支持
和請求消息相似,包括服務器自己的一些信息指示、以及響應消息自己的元數據
Date: Mon, 27 Jul 2009 12:28:53 GMT Server: Apache/2.2.14 (Win32) Last-Modified: Wed, 22 Jul 2009 19:15:56 GMT Content-Length: 88 Content-Type: text/html Connection: Closed
指示頭字段完成
案例中就是一個hello.html文件的內容