Http 通信

一、連接至Web服務器
一個客戶端應用(如Web瀏覽器)打開到Web服務器的HTTP端口的一個套接字(缺省爲80)。

例如:http://www.myweb.com:8080/index.html
在Java中,這將等同於代碼:
Soceet socket=new Socket("www.myweb.com",8080);
InputStream in=socket.getInputStream();
OutputStream out=socket.getOutputStream();

二、發送HTTP請求
通過連接,客戶端寫一個ASCII文本請求行,後跟0或多個HTTP頭標,一個空行和實現請求的任意數據。
一個請求由四個部分組成:請求行、請求頭標、空行和請求數據
1.請求行:請求行由三個標記組成:請求方法、請求URI和HTTP版本,它們用空格分隔。
例如:GET /index.html HTTP/1.1
HTTP規範定義了8種可能的請求方法:
GET            檢索URI中標識資源的一個簡單請求
HEAD            與GET方法相同,服務器只返回狀態行和頭標,並不返回請求文檔
POST            服務器接受被寫入客戶端輸出流中的數據的請求
PUT            服務器保存請求數據作爲指定URI新內容的請求
DELETE            服務器刪除URI中命名的資源的請求
OPTIONS        關於服務器支持的請求方法信息的請求
TRACE            Web服務器反饋Http請求和其頭標的請求
CONNECT        已文檔化但當前未實現的一個方法,預留做隧道處理
2.請求頭標:由關鍵字/值對組成,每行一對,關鍵字和值用冒號(:)分隔。
請求頭標通知服務器有關於客戶端的功能和標識,典型的請求頭標有:
User-Agent        客戶端廠家和版本
Accept            客戶端可識別的內容類型列表
Content-Length    附加到請求的數據字節數
3.空行:最後一個請求頭標之後是一個空行,發送回車符和退行,通知服務器以下不再有頭標。
4.請求數據:使用POST傳送數據,最常使用的是Content-Type和Content-Length頭標。

三、服務端接受請求並返回HTTP響應
Web服務器解析請求,定位指定資源。服務器將資源副本寫至套接字,在此處由客戶端讀取。
一個響應由四個部分組成;狀態行、響應頭標、空行、響應數據
1.狀態行:狀態行由三個標記組成:HTTP版本、響應代碼和響應描述。
HTTP版本:向客戶端指明其可理解的最高版本。
響應代碼:3位的數字代碼,指出請求的成功或失敗,如果失敗則指出原因。
響應描述:爲響應代碼的可讀性解釋。
例如:HTTP/1.1 200 OK
HTTP響應碼:
1xx:信息,請求收到,繼續處理
2xx:成功,行爲被成功地接受、理解和採納
3xx:重定向,爲了完成請求,必須進一步執行的動作
4xx:客戶端錯誤:
2.響應頭標:像請求頭標一樣,它們指出服務器的功能,標識出響應數據的細節。
3.空行:最後一個響應頭標之後是一個空行,發送回車符和退行,表明服務器以下不再有頭標。
4.響應數據:HTML文檔和圖像等,也就是HTML本身。

四、服務器關閉連接,瀏覽器解析響應
1.瀏覽器首先解析狀態行,查看錶明請求是否成功的狀態代碼。
2.然後解析每一個響應頭標,頭標告知以下爲若干字節的HTML。
3.讀取響應數據HTML,根據HTML的語法和語義對其進行格式化,並在瀏覽器窗口中顯示它。
4.一個HTML文檔可能包含其它需要被載入的資源引用,瀏覽器識別這些引用,對其它的資源再進行額外的請求,此過程循環多次。

五、無狀態連接
HTTP模型是無狀態的,表明在處理一個請求時,Web服務器並不記住來自同一客戶端的請求。

六、實例
1.瀏覽器發出請求
GET /index.html HTTP/1.1
服務器返回響應
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>

2.瀏覽器發出請求
GET /index.css HTTP/1.1
服務器返回響應
HTTP /1.1 200 OK
Date: Apr 11 2006 15:32:08 GMT
Server: Apache/2.0.46(win32)
Connection: Keep-alive, close
Content-Length: 70
Content-Type: text/plane

h3{
    font-size:20px;
    font-weight:bold;
    color:#005A9C;
}

3.瀏覽器發出請求
GET image/logo.png HTTP/1.1
服務器返回響應
HTTP /1.1 200 OK
Date: Apr 11 2006 15:32:08 GMT
Server: Apache/2.0.46(win32)
Connection: Keep-alive, close
Content-Length: 1280
Content-Type: text/plane

{Binary image data follows}


(附錄)
1.HTTP規範:Internet工程制定組織(IETF)發佈的RFC指定Internet標準,這些RFC被Internet研究發展機構廣泛接受。因爲它們是標準文檔,故一般用正規語言編寫,如立法文標一樣。
2.RFC:RFC一旦被提出,就被編號且不會再改變,當一個標準被修改時,則給出一個新的RFC。作爲標準,RFC在Internet上被廣泛採用。
3.HTTP的幾個重要RFC:
    RFC1945    HTTP 1.0 描述
    RFC2068    HTTP 1.1 初步描述
    RFC2616    HTTP 1.1 標準
4.資源標識符URI(Uniform Resource Identifter,URI)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章