淺談HTTP請求與響應
HTTP協議用於客戶端和服務器之間的通信,請求訪問的一段是客戶端,提供資源響應的一段是服務器端。
HTTP通信是采用請求應答的方式來進行的,客戶端發出請求,服務器響應。如果沒有客戶端的請求,服務器端是不進行任何響應的。HTTP通信機制是在一次完整的HTTP通信過程中,Web瀏覽器與Web服務器之間將完成下列4個步驟:
(1)建立TCP連接
在HTTP工作開始之前,Web瀏覽器首先要通過網絡與Web服務器建立連接,該連接是通過TCP /IP完成,這是在網絡層進行的。HTTP是比TCP更高層次的應用層協議,根據規則,只有低層協議建立之後才能,才能進行更層協議的連接,因此,首先要建立TCP連接,一般TCP連接的端口號是80。
(2)Web瀏覽器向Web服務器發送請求命令
一旦建立了TCP連接,Web瀏覽器就會向Web服務器發送請求命令,如下所示,其中GET表示請求服務的類型,隨後的字符串/index.html指明了請求訪問的資源對象,也叫做請求URI。最後的HTTP/1.1表示HTTP的版本號。綜合來看,請求報文包括請求方法、請求URI、協議版本、可選的請求首部字段和內容實體。
GET /index.htm HTTP/1.1
Host:hackr.jp
(3)Web服務器應答
客戶機向服務器發出請求後,服務器會客戶機回送應答,如下所示。開頭的HTTP/1.1表示服務器對應的版本號,接下來的200 OK表示請求處理的處理結果的狀態碼和原因短語。接下來是響應首部字段。
HTTP/1.1 200 OK
Date:Tue ,10 July 2016 08:33:16 GMT
Content-Length:362
Conten-Type:text/html
<html>
……
(4)Web服務器關閉TCP連接
一般情況下,一旦Web服務器向瀏覽器發送了請求數據,它就要關閉TCP連接,然後如果瀏覽器或者服務器在其頭信息加入了這行代碼
Connection:keep-alive
TCP連接在發送後將仍然保持打開狀態,於是,瀏覽器可以繼續通過相同的連接發送請求。保持連接節省了為每個請求建立新連接所需的時間,還節約了網絡帶寬。
在HTTP的請求服務類型主要有以下八種:
GET:獲取資源
GET方法用來請求訪問已經被URI識別的資源,具體的請求與響應的例子如下:
請求 |
GET /indexhtml HTTP/1.1 Host:www.hackr.jp |
響應 |
返回index.html的頁面資源 |
POST:傳輸實體主體,具體的請求響應例子如下:
請求 |
POST /submit.cgi HTTP/1.1 Host:www.hackr.jp Content-Length:1560(1560字節的數據) |
響應 |
返回submit.cgi接收數據的處理結果 |
PUT:傳輸文件,具體的請求響應例子如下:
請求 |
PUT /example.html HTTP/1.1 Host:www.hackr.jp Content-type:text/html Content-Length:1560(1560字節的數據) |
響應 |
返回狀態碼 |
HEAD:獲得保溫首部
請求 |
HEAD /indexhtml HTTP/1.1 Host:www.hackr.jp |
響應 |
返回index.html有關的響應首部 |
DELETE:刪除文件
請求 |
DELETE /example.html HTTP/1.1 Host:www.hackr.jp |
響應 |
返回狀態碼 |
OPTIONS:詢問支持的方法
請求 |
OPTIONS* HTTP/1.1 Host:www.hackr.jp |
響應 |
HTTP/1.1 200 OK Allow:GET,POST,HEAD,OPTIONS (返回服務器支持的方法) |
TRACE:追蹤路徑
請求 |
TRACE HTTP/1.1 Host:www.hackr.jp Max-Forwards:2 |
響應 |
HTTP/1.1 200 OK Content-type:message/http Content-Length:1024
TRACE HTTP/1.1 Host:www.hackr.jp Max-Forwards:2 |
CONNECT:要求用隧道協議鏈接代理
請求 |
CONNECT proxy.hackr.jp:8080 HTTP/1.1 Host:proxy.hackr.jp |
響應 |
HTTP/1.1 200 OK(之後進入網絡隧道) |
淺談HTTP請求與響應