HTTP學習筆記(1)

不管是請求消息仍是響應消息都由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

空行(CRLF)

指示頭字段區已完成,消息主體開始(若是有消息主體的話)資源

消息主體

好比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

一個空行(CRLF)

指示頭字段完成

可選的消息主體

案例中就是一個hello.html文件的內容

相關文章
相關標籤/搜索