posts - 0, comments - 77, trackbacks - 0, articles - 356
            BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

          HTTP協(xié)議精解

          Posted on 2007-09-07 15:33 semovy 閱讀(240) 評論(0)  編輯  收藏 所屬分類: JAVA基礎(chǔ)
          WEB服務(wù)器和瀏覽器之間的一問一答的交互過程也得遵循一定的規(guī)則,這個規(guī)則就是HTTP協(xié)議。它是TCP/IP協(xié)議集中的一個應(yīng)用層協(xié)議,用于定義瀏覽器和WEB服務(wù)器之間交換數(shù)據(jù)過程以及數(shù)據(jù)本身的格式。現(xiàn)在被廣泛使用的HTTP/1.1相對HTTP/1.0而言,最大的特點就是支持持續(xù)連接。

          1.HTTP/1.0的會話方式:

                                                   建立連接,發(fā)送請求信息         
                                   -------------------------------------------------------------------------->
                   客戶機                                                                              服務(wù)器
                                   <--------------------------------------------------------------------------
                                                   關(guān)閉連接,回送響應(yīng)消息

          每次連接只處理一個請求,即使是對同一個網(wǎng)站的每一個頁面的訪問,瀏覽器和WEB服務(wù)器都要建立一次單獨的連接。

          2.HTTP/1.1的會話方式:

                                                   建立連接,第1個請求信息         
                                   -------------------------------------------------------------------------->
                                                             ............
                                                   發(fā)送第N請求信息         
                                   -------------------------------------------------------------------------->
                   客戶機                 回送第1次響應(yīng)                                      服務(wù)器
                                   <--------------------------------------------------------------------------                                        
                                                           ..............
                                                   回應(yīng)第n次響應(yīng)
                                   <--------------------------------------------------------------------------
                                                   發(fā)送關(guān)閉連接請求         
                                   -------------------------------------------------------------------------->          
                                                   關(guān)閉連接              
                                   <--------------------------------------------------------------------------
                                                  

          HTTP/1.1支持持久連接,在一個TCP連接上可以傳送多個HTTP請求和響應(yīng),減少了建立和關(guān)閉連接的消耗和延遲。一個包含有許多圖象的網(wǎng)頁文件的多個請求和響應(yīng)可以在一個連接中傳輸,但每個單獨的網(wǎng)頁文件的請求和響應(yīng)仍然需要使用各自的連接,還允許客戶端不用等待上一次請求結(jié)果返回就可以發(fā)送下一個請求。

          HTTP消息的格式:
          一個完整的請求消息包括:一個請求行、若干消息頭、以及實體內(nèi)容。
          一個完整的響應(yīng)消息包括:一個狀態(tài)行、若干消息頭、以及實體內(nèi)容。
          這在前面已經(jīng)有過簡單的介紹。下面對這幾個部分再做個詳細(xì)的解說:
          1.請求行:包括三個部分,即請求方式、資源路徑、以及使用的HTTP協(xié)議版本。語法如下:請求方式 資源路徑 HTTP版本號<CRLF>,其中<CRLF>表示回車和換行這兩個字符的組合。HTTP請求方式包括POST、GET、HEAD、OPTIONS、DELETE、TRACE和PUT幾種。常用的是前兩種。
          2.狀態(tài)行:包括HTTP協(xié)議的版本號、一個狀態(tài)碼、以及對狀態(tài)碼進(jìn)行描述的文本信息。
          語法如下:HTTP版本號 狀態(tài)碼 原因敘述<CRLF>

          使用GET和POST傳遞參數(shù):
          在URL地址后面可以附加一些參數(shù),每個參數(shù)都由參數(shù)名和參數(shù)值組成,中間用=分隔,各個參數(shù)用&分隔,URL地址和整個參數(shù)之間用?分隔,如下所示:
          http://www.it315.org/servlet/ParamsServlet?param1=aaa&param2=bbb
          使用GET傳遞參數(shù)的數(shù)據(jù)量是有限的,一般限制在1KB以下。使用POST比GET要大的多。是沒有限制的。但是必須設(shè)置Content=Type消息頭為‘application/x-www-form-urlencoded’和設(shè)置Content-Length消息頭為實體內(nèi)容的長度。

          響應(yīng)狀態(tài)碼:
          200:表示一切正常,返回的是正常請求結(jié)果。
          404:表示服務(wù)器上不存在客戶機上所請求的資源,這個狀態(tài)碼在瀏覽網(wǎng)頁時最常見的。

          通用信息頭:
          Cache-Control:此字段用于通知客戶機和服務(wù)器之間的代理服務(wù)器如何使用已緩存的頁面。
          Connection:用于指定處理完本次請求/響應(yīng)后,客戶端和服務(wù)器是否還要繼續(xù)保持連接。
          Date:用于表示HTTP消息產(chǎn)生的當(dāng)前時間。
          Transfer-Encoding:用于指定實體內(nèi)容的傳輸編碼方式。

          請求頭:
          Accept:用于指定客戶端程序能夠處理的MIME類型。有多個時用逗號隔開。
          Accept-Charset:指出客戶端程序可以使用的字符集。有多個時用逗號隔開。
          Accept-Encoding:指定客戶機能夠進(jìn)行解碼的數(shù)據(jù)編碼方式。有多個時用逗號隔開。
          Accept-Language:指定客戶機期望服務(wù)器返回哪個國家語言的文檔。有多個時用逗號隔開。
          Host:指定資源所在的主機名和端口號。

          響應(yīng)頭:
          Accept-Range:用于說明當(dāng)前WEB服務(wù)器是否接受Range請求和Range請求中指定的數(shù)據(jù)的單位。
          Location:用于通知客戶機應(yīng)該到哪個新的地址去獲取文檔。由于當(dāng)前響應(yīng)并沒有直接返回內(nèi)容給客戶機,所以使用Location頭的HTTP消息不應(yīng)該有實體內(nèi)容,由此可見,在消息頭中不能同時出現(xiàn)Location和Contect-Type這兩個頭自段。

          實體頭:
          Allow:用于指定客戶機請求的資源所支持的請求方法。
          Content-Encoding:用于指定實體內(nèi)容的壓縮編碼方式。
          Content-Language:用于指定返回的網(wǎng)頁文檔的國家語言類型。
          Content-Length:用于指定實體內(nèi)容的長度。
          Content-Location:用于指定響應(yīng)消息中所封裝的實體內(nèi)容的實際位置路徑。
          Content-Type:用于指定實體內(nèi)容的MIME類型。客戶機通過檢查服務(wù)器響應(yīng)消息的此字段中的MIME類型就能知道實體內(nèi)容的數(shù)據(jù)格式和知道以何種方式來進(jìn)行處理了。<Tomcat>安裝目錄下的conf目錄下的web.xml文件里面就定義了很多的類型。
          Last-Modified:用于指定文檔的最后修改時間。

          擴展頭:
          Refresh:此字段告訴瀏覽器隔多長時間刷新。

          主站蜘蛛池模板: 江门市| 富蕴县| 平谷区| 张家川| 黄浦区| 桓仁| 仲巴县| 阳山县| 富裕县| 溆浦县| 陵川县| 明溪县| 建水县| 中宁县| 宝清县| 文成县| 潍坊市| 鸡东县| 平定县| 杭州市| 临猗县| 长春市| 津南区| 桓仁| 乡城县| 林州市| 辽源市| 府谷县| 绥宁县| 政和县| 民和| 廉江市| 积石山| 濮阳市| 青海省| 洞口县| 叶城县| 闸北区| 江安县| 洱源县| 定日县|