GET實現HTTP協議請求包的分析
HTTP協議是我們網絡中必不可少的重要協議。那么下面我們就來對這方面的問題進行一下深入講解。那么我們就針對GET方法實現HTTP協議的具體操作進行一下分析。HTTP協議用于在Internet上發送和接收消息。HTTP協議是一種請求-應答式的協議??客戶端發送一個請求,服務器返回該請求的應答,所有的請求與應答都是HTTP包。HTTP協議使用可靠的TCP連接,默認端口是80。HTTP的第一個版本是HTTP/0.9,后來發展到了HTTP/1.0,現在最新的版本是HTTP/1.1。HTTP/1.1由RFC 2616 定義。
在HTTP中,Client/Server之間的會話總是由客戶端通過建立連接和發送HTTP請求包初始化,服務器不會主動聯系客戶端或要求與客戶端建立連接。瀏覽器和服務器都可以隨時中斷連接,例如,在瀏覽網頁時你可以隨時點擊“停止"按鈕中斷當前的文件下載過程,關閉與Web服務器的HTTP連接。
1 HTTP請求包
HTTP請求包(GET、POST等請求方法)由三個部分構成,分別是:方法-URI-協議/版本,請求頭,請求正文。下面是一個HTTP協議請求包(GET)的例子:
- GET /index.jsp HTTP/1.1
- Accept-Language: zh-cn
- Connection: Keep-Alive
- Host: 192.168.0.106
- Content-Length: 37
- userName=new_andy&password=new_andy
請求包的第一行是方法-URI-協議/版本:
GET就是請求方法,根據HTTP標準,HTTP協議請求可以使用多種請求方法。HTTP 1.1支持七種請求方法:GET、POST、HEAD、OPTIONS、PUT、DELETE和TRACE等,常用的為請求方法是GET和POST。
/index.jsp表示URI。URI指定了要訪問的網絡資源。HTTP/1.1是協議和協議的版本。
最后一行userName=new_andy&password=new_andy為正文,正文與HTTP頭部有一個空行(rn)分隔。這里需要說明的一點,其中Content-Length說明正文的長度,有的正文長度沒有在頭部說明,只是標明Transfer-Encoding: chunked。關于chunked類型的長度計算方法,見RFC 1626。
請求包的頭部還會包含許多有關客戶端環境和請求正文的有用信息,這里不再描述。
2 HTTP協議應答包
和HTTP請求包相似,由三個部分構成,分別是:協議-狀態代碼-描述,應答頭,應答正文。下面是一個HTTP應答的例子:
- HTTP/1.1 200 OK
- Server: Microsoft-IIS/4.0
- Date: Mon, 3 Jan 2005 13:13:33 GMT
- Content-Type: text/html
- Last-Modified: Mon, 11 Jan 2004 13:23:42 GMT
- Content-Length: 90
- <html>
- <head>
- <title>解讀HTTP包示例</title></head><body>
- Hello WORLD!
- </body>
- </html>
HTTP應答包的第一行類似于HTTP協議請求的第一行,表示所用的協議是HTTP 1.1,服務器處理請求的狀態碼200。
應答頭也和請求頭一樣包含許多有用的信息,例如服務器類型、日期時間、內容類型和長度等。應答的正文就是服務器返回的HTML頁面。應答頭和正文之間也用CRLF分隔。