1. 程式人生 > >Java http 請求/響應資訊解析

Java http 請求/響應資訊解析

HTTP允許Web伺服器和瀏覽器通過網路傳送並接收資料,是一種基於“request-response”,Http使用可靠的TCP連線,當前最新版本是HTTP/1.1,定義域RFC2616中,下載地址

首先介紹一下請求和響應的基本格式

HTTP請求資訊

HTTP請求一般包含三個部分,從上到下依次是:

1、第一行:請求方法 URI  協議/版本(例:GET /index.jsp HTTP/1.1)

2、幾行header:  請求頭資訊(多行,例子:Connection: Keep-Alive)

3、請求體body:  請求體和請求頭之間有一個空行,只能包含回車換行符(CRLF \n\r)

一個簡單請求示例如下:

  1. POST /login.actionHTTP/1.1
  2. user-agent=Java/1.6.0_31
  3. host=localhost:8080
  4. accept=text/html,image/gif, image/jpeg, *; q=.2, */*; q=.2
  5. connection=keep-alive
  6. username=xxx&password=xxx                

注:注意上面請求頭和請求體之間必須有一個空行(回車換行符CRLF),這樣HTTP伺服器才知道請求體從哪裡開始。注意請求頭中Content-Length: 25是請求體中位元組byte數。

java示例:

  1. HttpURLConnectionconn = (HttpURLConnection) new
    URL(url).openConnection();
  2. conn.setRequestMethod("GET");
  3. conn.setRequestProperty("user-agent","Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; Trident/4.0)");    

HTTP 響應資訊

響應資訊與請求資訊類似,也包括三部分:

1、  協議 狀態碼  描述  (例: HTTP/1.1 200 OK)

2、  響應頭資訊

3、  響應體

一個響應示例如下:

  1. HTTP/1.1 200 OK
  2. Content-Type: text/html
  3. Content-Length: xxx
  4. <html></html>

注:響應頭與響應體之間也有一個空行,以表示響應體的開始。

下面我們介紹一下持久連線 Connection: Keep-Alive新特性

在1.1版本之前,當伺服器將請求的資源返回後,就會斷開與客戶端瀏覽器的連線,此時網頁上包含的其它資源,如圖片等就會通過開啟其它連線來下載。對系統來說,開啟和關閉一個連線的開銷是很大的,所以這樣的操作既浪費資源也不搞笑。在1.1版本中,引入了持久連線的概念,當瀏覽器下載頁面後,伺服器並不會馬上斷開連線,而是等頁面把所包含的資源都下載完畢後才斷開連線,這樣頁面及頁面所包含的所有資源都會通過一個連線來下載。1.1版本中會預設使用持久連線,也可以在請求頭資訊中手動指定,即設定請求頭Connection:Keep-Alive。