Posted on 2007-09-07 15:33
semovy 閱讀(235)
評論(0) 編輯 收藏 所屬分類:
JAVA基礎
WEB服務器和瀏覽器之間的一問一答的交互過程也得遵循一定的規則,這個規則就是HTTP協議。它是TCP/IP協議集中的一個應用層協議,用于定義瀏覽器和WEB服務器之間交換數據過程以及數據本身的格式。現在被廣泛使用的HTTP/1.1相對HTTP/1.0而言,最大的特點就是支持持續連接。
1.HTTP/1.0的會話方式:
建立連接,發送請求信息
-------------------------------------------------------------------------->
客戶機 服務器
<--------------------------------------------------------------------------
關閉連接,回送響應消息
每次連接只處理一個請求,即使是對同一個網站的每一個頁面的訪問,瀏覽器和WEB服務器都要建立一次單獨的連接。
2.HTTP/1.1的會話方式:
建立連接,第1個請求信息
-------------------------------------------------------------------------->
............
發送第N請求信息
-------------------------------------------------------------------------->
客戶機 回送第1次響應 服務器
<--------------------------------------------------------------------------
..............
回應第n次響應
<--------------------------------------------------------------------------
發送關閉連接請求
-------------------------------------------------------------------------->
關閉連接
<--------------------------------------------------------------------------
HTTP/1.1支持持久連接,在一個TCP連接上可以傳送多個HTTP請求和響應,減少了建立和關閉連接的消耗和延遲。一個包含有許多圖象的網頁文件的多個請求和響應可以在一個連接中傳輸,但每個單獨的網頁文件的請求和響應仍然需要使用各自的連接,還允許客戶端不用等待上一次請求結果返回就可以發送下一個請求。
HTTP消息的格式:
一個完整的請求消息包括:一個請求行、若干消息頭、以及實體內容。
一個完整的響應消息包括:一個狀態行、若干消息頭、以及實體內容。
這在前面已經有過簡單的介紹。下面對這幾個部分再做個詳細的解說:
1.請求行:包括三個部分,即請求方式、資源路徑、以及使用的HTTP協議版本。語法如下:請求方式 資源路徑 HTTP版本號<CRLF>,其中<CRLF>表示回車和換行這兩個字符的組合。HTTP請求方式包括POST、GET、HEAD、OPTIONS、DELETE、TRACE和PUT幾種。常用的是前兩種。
2.狀態行:包括HTTP協議的版本號、一個狀態碼、以及對狀態碼進行描述的文本信息。
語法如下:HTTP版本號 狀態碼 原因敘述<CRLF>
使用GET和POST傳遞參數:
在URL地址后面可以附加一些參數,每個參數都由參數名和參數值組成,中間用=分隔,各個參數用&分隔,URL地址和整個參數之間用?分隔,如下所示:
http://www.it315.org/servlet/ParamsServlet?param1=aaa¶m2=bbb
使用GET傳遞參數的數據量是有限的,一般限制在1KB以下。使用POST比GET要大的多。是沒有限制的。但是必須設置Content=Type消息頭為‘application/x-www-form-urlencoded’和設置Content-Length消息頭為實體內容的長度。
響應狀態碼:
200:表示一切正常,返回的是正常請求結果。
404:表示服務器上不存在客戶機上所請求的資源,這個狀態碼在瀏覽網頁時最常見的。
通用信息頭:
Cache-Control:此字段用于通知客戶機和服務器之間的代理服務器如何使用已緩存的頁面。
Connection:用于指定處理完本次請求/響應后,客戶端和服務器是否還要繼續保持連接。
Date:用于表示HTTP消息產生的當前時間。
Transfer-Encoding:用于指定實體內容的傳輸編碼方式。
請求頭:
Accept:用于指定客戶端程序能夠處理的MIME類型。有多個時用逗號隔開。
Accept-Charset:指出客戶端程序可以使用的字符集。有多個時用逗號隔開。
Accept-Encoding:指定客戶機能夠進行解碼的數據編碼方式。有多個時用逗號隔開。
Accept-Language:指定客戶機期望服務器返回哪個國家語言的文檔。有多個時用逗號隔開。
Host:指定資源所在的主機名和端口號。
響應頭:
Accept-Range:用于說明當前WEB服務器是否接受Range請求和Range請求中指定的數據的單位。
Location:用于通知客戶機應該到哪個新的地址去獲取文檔。由于當前響應并沒有直接返回內容給客戶機,所以使用Location頭的HTTP消息不應該有實體內容,由此可見,在消息頭中不能同時出現Location和Contect-Type這兩個頭自段。
實體頭:
Allow:用于指定客戶機請求的資源所支持的請求方法。
Content-Encoding:用于指定實體內容的壓縮編碼方式。
Content-Language:用于指定返回的網頁文檔的國家語言類型。
Content-Length:用于指定實體內容的長度。
Content-Location:用于指定響應消息中所封裝的實體內容的實際位置路徑。
Content-Type:用于指定實體內容的MIME類型。客戶機通過檢查服務器響應消息的此字段中的MIME類型就能知道實體內容的數據格式和知道以何種方式來進行處理了。<Tomcat>安裝目錄下的conf目錄下的web.xml文件里面就定義了很多的類型。
Last-Modified:用于指定文檔的最后修改時間。
擴展頭:
Refresh:此字段告訴瀏覽器隔多長時間刷新。