1. 程式人生 > >http請求/響應包格式

http請求/響應包格式

lang 方法 for tex charset agent lai 響應 鏈接

一、什麽是http協議?

轉載:http://blog.csdn.net/daijin888888/article/details/51025634

由w3c制訂的一種網絡應用層協議,定義了瀏覽器與web服務器之間通信的過程以及通信時所使用的數據格式。
1)通信的過程
step1,瀏覽器建立與web服務器之間的連接
step2,瀏覽器將請求數據打包(生成請求數據包)並發送給web服務器。
step3,web服務器將處理結果打包(生成響應數據包)並發送給瀏覽器。
step4,web服務器關閉連接。
如果瀏覽器要再發請求,需要重新建立新的連接。
特點: 一次請求,一次連接


優點: web服務器可以利用有限的連接為盡可能多的客戶端(瀏覽器)服務。
2)數據格式

a,請求數據包

如:

[plain] view plain copy
  1. POST /web02/hello HTTP/1.1
  2. Host: localhost:8080
  3. User-Agent: Mozilla/5.0 (Windows NT 5.1; rv:15.0) Gecko/20100101 Firefox/15.0.1
  4. Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
  5. Accept-Language: zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3
  6. Accept-Encoding: gzip, deflate
  7. Connection: keep-alive
  8. Referer: http://localhost:8888/web02/hello_form.html
  9. Content-Type: application/x-www-form-urlencoded
  10. Content-Length: 16

請求行: 請求方式 請求資源路徑 協議類型和版本
消息頭:
消息頭是一些鍵值對,一般由w3c定義,瀏覽器與web服務器之間都可以發送,表示特定的某種含義,比如,瀏覽器可以發送"user-agent"消息頭,告訴web服務器瀏覽器的類型和版本。
實體內容:
只有當請求方式為post時才有值(請求參數),如果請求方式為get,請求參數會添加到請求資源路徑的後面。

b,響應數據包

如:

[plain] view plain copy
  1. HTTP/1.1 200 OK
  2. Server: Apache-Coyote/1.1
  3. Content-Type: text/html;charset=utf-8
  4. Content-Length: 30
  5. Date: Thu, 05 Dec 2013 07:16:28 GMT

狀態行: 協議類型和版本 狀態碼 狀態描述
b1,什麽是狀態碼
是一個三位數字,由w3c定義,表示服務器處理請求的狀態。
b2,常見的狀態碼
200: 服務器處理請求正常。
404: 服務器依據請求路徑找不到對應的資源。
500: 系統錯誤,服務器端的程序在運行過程當中出錯了。
405: 服務器找不到可執行的方法來處理請求。
消息頭:
服務器也可以發送一些消息頭給瀏覽器,比如"content-type",告訴瀏覽器,服務器返回的數據類型和編碼格式(字符集)。
實體內容:
程序處理的結果,瀏覽器會將實體內容中的數據取出來,生成相應的頁面。

二、請求方式

1)哪一些情況下,瀏覽器會發送get請求
a,直接在瀏覽器地址欄輸入某個地址
b,點擊鏈接
c,表單使用默認的提交方式
2)get請求的特點
a,會將請求參數放到請求資源路徑的後面,只能提交少量的數據(因為請求行最多只能存放2k左右的數據)。
b,會將請求參數顯示在瀏覽器地址欄,不安全(路由器會記錄請求地址)。
3)哪一些情況下,瀏覽器會發送post請求
設置了表單的method屬性值為post
4)post請求的特點
a,會將請求參數放到實體內容裏面,能提交大量的數據。
b,不會將請求參數顯示在瀏覽器地址欄,相對安全(瀏覽器沒有加密)。
不管是get還是post,都不會對請求參數加密,所以如果是敏感數據,一般都需要加密處理(https)。

Http協議支持六種請求方法,即:
  0,GET
  1,HEAD
  2,PUT
  3,DELETE
  4,POST
  5,OPTIONS

  6.trace

但其實我們大部分情況下只用到了GET和POST。如果想設計一個符合RESTful規範的web應用程序,則這六種方法都會用到。不過即使暫時不想涉及REST,了解這六種方法的本質仍然是很有作用的。大家將會發現,原來web也是很簡潔明了的。下面依次說明這六種方法。
  0,GET:GET可以說是最常見的了,它本質就是發送一個請求來取得服務器上的某一資源。資源通過一組HTTP頭和呈現數據(如HTML文本,或者圖片或者視頻等)返回給客戶端。GET請求中,永遠不會包含呈現數據。
  1,HEAD:HEAD和GET本質是一樣的,區別在於HEAD不含有呈現數據,而僅僅是HTTP頭信息。有的人可能覺得這個方法沒什麽用,其實不是這樣的。想象一個業務情景:欲判斷某個資源是否存在,我們通常使用GET,但這裏用HEAD則意義更加明確。
  2,PUT:這個方法比較少見。HTML表單也不支持這個。本質上來講, PUT和POST極為相似,都是向服務器發送數據,但它們之間有一個重要區別,PUT通常指定了資源的存放位置,而POST則沒有,POST的數據存放位置由服務器自己決定。舉個例子:如一個用於提交博文的URL,/addBlog。如果用PUT,則提交的URL會是像這樣的”/addBlog/abc123”,其中abc123就是這個博文的地址。而如果用POST,則這個地址會在提交後由服務器告知客戶端。目前大部分博客都是這樣的。顯然,PUT和POST用途是不一樣的。具體用哪個還取決於當前的業務場景。
  3,DELETE:刪除某一個資源。基本上這個也很少見,不過還是有一些地方比如amazon的S3雲服務裏面就用的這個方法來刪除資源。
  4,POST:向服務器提交數據。這個方法用途廣泛,幾乎目前所有的提交操作都是靠這個完成。
  5,OPTIONS:這個方法很有趣,但極少使用。它用於獲取當前URL所支持的方法。若請求成功,則它會在HTTP頭中包含一個名為“Allow”的頭,值是所支持的方法,如“GET, POST”。
  其實還有一個TRACE方法,不過這個基本上不會用到,這裏就不介紹了。

http請求/響應包格式