HTTP請求模型
一、連接至Web服務(wù)器
一個客戶端應(yīng)用(如Web瀏覽器)打開到Web服務(wù)器的HTTP端口的一個套接字(缺省為80)。
例如:http://www.:8080/index.html
在Java中,這將等同于代碼:
Socket socket=new Socket("www.",8080); InputStream in=socket.getInputStream(); OutputStream out=socket.getOutputStream(); |
通過連接,客戶端寫一個ASCII文本請求行,后跟0或多個HTTP頭標(biāo),一個空行和實現(xiàn)請求的任意數(shù)據(jù)。一個請求由四個部分組成:請求行、請求頭標(biāo)、空行和請求數(shù)據(jù)。
1、請求行:請求行由三個標(biāo)記組成:請求方法、請求URI和HTTP版本,它們用空格分隔。
例如:GET /index.html HTTP/1.1
HTTP規(guī)范定義了8種可能的請求方法:
|
請求頭標(biāo)通知服務(wù)器有關(guān)于客戶端的功能和標(biāo)識,典型的請求頭標(biāo)有:
|
4、請求數(shù)據(jù):使用POST傳送數(shù)據(jù),最常使用的是Content-Type和Content-Length頭標(biāo)。
三、服務(wù)端接受請求并返回HTTP響應(yīng)
Web服務(wù)器解析請求,定位指定資源。服務(wù)器將資源副本寫至套接字,在此處由客戶端讀取。
一個響應(yīng)由四個部分組成;狀態(tài)行、響應(yīng)頭標(biāo)、空行、響應(yīng)數(shù)據(jù)
1、狀態(tài)行:狀態(tài)行由三個標(biāo)記組成:HTTP版本、響應(yīng)代碼和響應(yīng)描述。
HTTP版本:向客戶端指明其可理解的最高版本。
響應(yīng)代碼:3位的數(shù)字代碼,指出請求的成功或失敗,如果失敗則指出原因。
響應(yīng)描述:為響應(yīng)代碼的可讀性解釋。
例如:HTTP/1.1 200 OK
HTTP響應(yīng)碼:
1xx:信息,請求收到,繼續(xù)處理 2xx:成功,行為被成功地接受、理解和采納 3xx:重定向,為了完成請求,必須進(jìn)一步執(zhí)行的動作 4xx:客戶端錯誤,請求包含語法錯誤或者請求無法實現(xiàn) 5xx:服務(wù)器錯誤,服務(wù)器不能完成對一種正常請求的處理 |
2、響應(yīng)頭標(biāo):像請求頭標(biāo)一樣,它們指出服務(wù)器的功能,標(biāo)識出響應(yīng)數(shù)據(jù)的細(xì)節(jié)。
|
4、響應(yīng)數(shù)據(jù):HTML文檔和圖像等,也就是HTML本身。
四、服務(wù)器關(guān)閉連接,瀏覽器解析響應(yīng)
1.瀏覽器首先解析狀態(tài)行,查看表明請求是否成功的狀態(tài)代碼。
2.然后解析每一個響應(yīng)頭標(biāo),頭標(biāo)告知以下為若干字節(jié)的HTML。
3.讀取響應(yīng)數(shù)據(jù)HTML,根據(jù)HTML的語法和語義對其進(jìn)行格式化,并在瀏覽器窗口中顯示它。
4.一個HTML文檔可能包含其它需要被載入的資源引用,瀏覽器識別這些引用,對其它的資源再進(jìn)行額外的請求,此過程循環(huán)多次。
五、無狀態(tài)連接
HTTP模型是無狀態(tài)的,表明在處理一個請求時,Web服務(wù)器并不記住來自同一客戶端的請求。HTTP是一種無狀態(tài)的協(xié)議,無狀態(tài)是指Web瀏覽器和Web服務(wù)器之間不需要建立持久的連接,這意味著當(dāng)一個客戶端向服務(wù)器端發(fā)出請求,然后Web服務(wù)器返回響應(yīng)(response),連接就被關(guān)閉了,在服務(wù)器端不保留連接的有關(guān)信息.
如果瀏覽器或者服務(wù)器在其頭信息加入了這行代碼:Connection:keep-alive,TCP連接在發(fā)送后將仍然保持打開狀態(tài),于是,瀏覽器可以繼續(xù)通過相同的連接發(fā)送請求。保持連接節(jié)省了為每個請求建立新連接所需的時間,還節(jié)約了網(wǎng)絡(luò)帶寬。
六、實例
1.瀏覽器發(fā)出請求
GET /index.html HTTP/1.1
服務(wù)器返回響應(yīng):
HTTP /1.1 200 OK Date: Apr 11 2006 15:32:08 GMT Server: Apache/2.0.46(win32) Content-Length: 119 Content-Type: text/html <HTML> <HEAD> <LINK REL="stylesheet" HREF="index.css"> </HEAD> <BODY> <IMG SRC="image/logo.png"> </BODY> </HTML> |
附錄知識:
1.HTTP規(guī)范:Internet工程制定組織(IETF)發(fā)布的RFC指定Internet標(biāo)準(zhǔn),這些RFC被Internet研究發(fā)展機(jī)構(gòu)廣泛接受。因為它們是標(biāo)準(zhǔn)文檔,故一般用正規(guī)語言編寫,如立法文標(biāo)一樣。
2.RFC:RFC一旦被提出,就被編號且不會再改變,當(dāng)一個標(biāo)準(zhǔn)被修改時,則給出一個新的RFC。作為標(biāo)準(zhǔn),RFC在Internet上被廣泛采用。
3.HTTP的幾個重要RFC:
RFC1945 HTTP 1.0 描述
RFC2068 HTTP 1.1 初步描述
RFC2616 HTTP 1.1 標(biāo)準(zhǔn)
4.資源標(biāo)識符URI(Uniform Resource Identifter,URI)
5.在http
1.0的協(xié)議里定義了三種請求方式:GET,POST,HEAD。http
1.1又補(bǔ)充了一些,如PUT,DELETE,OPTIONS和TRACE。
6.查看HTTP請求和相應(yīng)的頭信息:http:/// 或者
firebug/httpwatch等工具。
參考資料:
http://www./cwbwebhome/article/article2/2406.html?id=1093
http://www./index.php/2009/10/http-%E8%AF%B7%E6%B1%82%E7%AE%80%E4%BB%8B/