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)
一個簡單請求示例如下:
- POST /login.actionHTTP/1.1
- user-agent=Java/1.6.0_31
- host=localhost:8080
- accept=text/html,image/gif, image/jpeg, *; q=.2, */*; q=.2
- connection=keep-alive
- username=xxx&password=xxx
注:注意上面請求頭和請求體之間必須有一個空行(回車換行符CRLF),這樣HTTP伺服器才知道請求體從哪裡開始。注意請求頭中Content-Length: 25是請求體中位元組byte數。
java示例:
- HttpURLConnectionconn = (HttpURLConnection)
new
- conn.setRequestMethod("GET");
- 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、 響應體
一個響應示例如下:
- HTTP/1.1 200 OK
- Content-Type: text/html
- Content-Length: xxx
- <html></html>
注:響應頭與響應體之間也有一個空行,以表示響應體的開始。
下面我們介紹一下持久連線 Connection: Keep-Alive新特性
在1.1版本之前,當伺服器將請求的資源返回後,就會斷開與客戶端瀏覽器的連線,此時網頁上包含的其它資源,如圖片等就會通過開啟其它連線來下載。對系統來說,開啟和關閉一個連線的開銷是很大的,所以這樣的操作既浪費資源也不搞笑。在1.1版本中,引入了持久連線的概念,當瀏覽器下載頁面後,伺服器並不會馬上斷開連線,而是等頁面把所包含的資源都下載完畢後才斷開連線,這樣頁面及頁面所包含的所有資源都會通過一個連線來下載。1.1版本中會預設使用持久連線,也可以在請求頭資訊中手動指定,即設定請求頭Connection:Keep-Alive。