<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆 - 312, 文章 - 14, 評論 - 1393, 引用 - 0
    數(shù)據(jù)加載中……

    Java網(wǎng)絡(luò)編程從入門到精通(21):HTTP消息的格式

    本文為原創(chuàng),如需轉(zhuǎn)載,請注明作者和出處,謝謝!

    上一篇:Java網(wǎng)絡(luò)編程從入門到精通(20):HTTP協(xié)議簡介

        當(dāng)用戶在瀏覽器中輸入一個基于HTTP協(xié)議的URL時(以http://開頭的URL),就相當(dāng)于通知器按著這個URL組織生成一個HTTP請求,并交過個請求發(fā)送到服務(wù)器;同時,等待服務(wù)器的響應(yīng)。無論是請求還是響應(yīng),都統(tǒng)稱為HTTP消息。

    HTTP協(xié)議分為兩部分:

    1. HTTP請求消息。

    2. HTTP響應(yīng)消息。

    一、HTTP請求消息

    HTTP請求消息分為請求消息頭以及請求實體內(nèi)容兩部分。請求消息頭的第一行必須由以下三部分組成:

     請求的方法(GET、POST和HEAD等)。

     Web資源的路徑(http://www.website.com/test/test.html中的/test/test.html

    部分)。

    HTTP協(xié)議的版本(HTTP/1.0或HTTP/1.1)。

    在請求消息頭的其他行是請求頭字段。每一行的格式是:

    "頭字段" ":" "頭字段的值"

    請求頭以一個空行結(jié)束。如下面上一個GET請求的例子:

    GET / HTTP/1.1
    Host: www.csdn.net
    Connection: Keep-Alive
    Accept: */*

    如果是POST請求,將要提交的實體內(nèi)容放到消息頭的空行后面,如下面是一個POST請求的例子:

    POST /servlets-examples/servlet/RequestParamExample HTTP/1.1
    Host: localhost:
    8888
    Content-Length: 
    29
    Connection: Close

    firstname
    =Bill&lastname=Gates

    在上面的請求消息中Content-Length表示請求內(nèi)容的以字節(jié)為單位的長度(" firstname=Bill&lastname=Gates"的長度)。在使用POST方法時,這個字段必須提供,而且長度必須等于實體內(nèi)容的長度,否則服務(wù)器將返回一個錯誤狀態(tài)碼。

    二、HTTP響應(yīng)消息

    HTTP響應(yīng)消息同樣也分為消息頭和實體內(nèi)容兩部分。HTTP的響應(yīng)消息頭和請求消息頭類似;第一行是請求的結(jié)果,也就是說,在響應(yīng)消息頭的第一行表明了請求消息是否成功地獲得了服務(wù)器上的Web資源。第一行必須由以下三部分組成:

    1.       響應(yīng)消息的HTTP版本。

    格式為HTTP/1.1或HTTP/1.0。這個版本號未必和請求消息頭的版本號一致;這主要是

    因為,服務(wù)器未必支持HTTP請求中所描述的HTTP版本,如使用GET / HTTP/1.1去請求服務(wù)器,當(dāng)服務(wù)器只支持HTTP1.0時,那么就會返回HTTP/1.0。

    2.       狀態(tài)碼。

    這個狀態(tài)碼由三位的數(shù)字組成,分為五個檔次。下面是HTTP1.1的響應(yīng)碼:

    (1)以1開頭的數(shù)字(1xx)。

     臨時請求狀態(tài)碼。由100和101組成。這類狀態(tài)碼并不經(jīng)常使用,它們的作為主要是服務(wù)器為客戶端返回的臨時的狀態(tài)。

    (2)以2開頭的數(shù)字(2xx)。

     請求成功狀態(tài)碼。范圍從200到206。其中最常用的是200,它表示客戶端請求成功,服務(wù)器已經(jīng)將所請求的Web資源返回到了客戶端。其他的六個狀態(tài)碼類似,都表示請求成功,只是要指引客戶端進和下一步的動作。如狀態(tài)碼206表示服務(wù)器只是返回了一部分請求資源,客戶端要想獲得全部的Web資源,必須繼續(xù)發(fā)出HTTP請求。其他的響應(yīng)碼的含義可以參閱HTTP1.1的規(guī)范RFC2616。

    (3)以3開頭的數(shù)字(3xx)。

     Web資源重定向狀態(tài)碼。范圍從300到307。所有以3開頭的狀態(tài)碼都以不同的原因和方式使Web資源改變了原來的URL。如302通過一個Location字段確定了Web資源改變URL后的位置。有了這種狀態(tài)碼,當(dāng)某個網(wǎng)站或其他的Web資源的URL變化后,而訪問這些Web資源的用戶并不能即使知道變化后的URL;因此,可以在用戶訪問原來的URL時加一個302響應(yīng),使客戶端自動去訪問新的URL。

    (4)以4開頭的數(shù)字(4xx)。

     客戶端錯誤狀態(tài)碼。范圍從400到417。也許沒人希望看到這狀態(tài)碼。但它們確實在Internet上大量存在。當(dāng)用戶訪問的Web資源不存在或是沒有權(quán)限訪問Web資源時,服務(wù)器將返回這類狀態(tài)碼。這類狀態(tài)碼中最常遇到的是400。當(dāng)用戶發(fā)送一個不存在的Web資源路徑時(GET、POST和HEAD方法后面跟的路徑),服務(wù)器就會返回這個狀態(tài)碼。

    (5)以5開頭的數(shù)字(5xx)。

    服務(wù)器錯誤狀態(tài)碼。范圍從500到505。這類狀態(tài)碼也是一類錯誤狀態(tài)碼,只是它和4xx不同的是,5xx的錯誤是由于服務(wù)器的原因而產(chǎn)生的;如用戶向服務(wù)器發(fā)送一個HTTP協(xié)議不支持的方法,如GET1,服務(wù)器將返回501錯誤,表示服務(wù)器不支持這個HTTP請求方法。

    3.     狀態(tài)信息。

    響應(yīng)信息的內(nèi)容和狀態(tài)碼息息相關(guān)。如狀態(tài)碼為200,則狀態(tài)信息為"OK"。狀態(tài)碼為501,狀態(tài)信息為"Not Implemented"。要想詳細(xì)了解每一個狀態(tài)碼所對應(yīng)的狀態(tài)信息,請參閱HTTP1.1的規(guī)范RFC2616。

    HTTP響應(yīng)消息的其他部分和請求消息一樣,也是由很多響應(yīng)頭字段組成,每個字段和字段值占一行。響應(yīng)消息頭使用一個空行結(jié)束,空行的后面跟著HTTP響應(yīng)消息的實體內(nèi)容。如下面是一個完整的HTTP請求和響應(yīng)的例子:

    HTTP請求消息

    GET / HTTP/1.1
    Host:www.csdn.net

    HTTP響應(yīng)消息


    HTTP/1.0 200 OK
    Content-Length: 
    132273
    Content-Type: text/html
    Content-Location: http://www.csdn.net/index.htm
    Last-Modified: Sun
    , 28 Jan 2007 09:20:00 GMT
    Accept-Ranges: bytes
    ETag: 
    "eed72b7cbd42c71:1b0e"
    Server: Microsoft-IIS/
    6.0
    X-Powered-By: ASP.NET
    Date: Sun
    , 28 Jan 2007 09:23:26 GMT
    Age: 
    32
    X-Cache: HIT from cachebj244.csdn.net
    Connection: close
    <!DOCTYPE html 

     

    從上面的HTTP消息可以看出,請求和響應(yīng)消息中的HTTP版本并不一樣,這說明CSDN的Web服務(wù)器為了和只支持HTTP1.0的客戶端兼容,也采用了HTTP1.0協(xié)議。

    注意:
    在HTTP請求和響應(yīng)消息中的第一行的請求方法(GET、POST等)以及HTTP/1.1或HTTP1.0中的字母必須大寫,請求方法后面的路徑大小寫都可。消息頭字段對大小寫不敏感,但大多數(shù)的請求和響應(yīng)字段名都采取了首字母大寫的方式。

    下一篇:
    Java網(wǎng)絡(luò)編程從入門到精通(22):實現(xiàn)HTTP模擬器





    Android開發(fā)完全講義(第2版)(本書版權(quán)已輸出到臺灣)

    http://product.dangdang.com/product.aspx?product_id=22741502



    Android高薪之路:Android程序員面試寶典 http://book.360buy.com/10970314.html


    新浪微博:http://t.sina.com.cn/androidguy   昵稱:李寧_Lining

    posted on 2009-06-08 17:22 銀河使者 閱讀(3940) 評論(3)  編輯  收藏 所屬分類: java 原創(chuàng)網(wǎng)絡(luò)編程

    評論

    # re: Java網(wǎng)絡(luò)編程從入門到精通(21):HTTP消息的格式  回復(fù)  更多評論   

    post發(fā)送給服務(wù)器的數(shù)據(jù)在http協(xié)議里是如何傳送的?
    2009-06-09 13:00 | 銀河猛男

    # re: Java網(wǎng)絡(luò)編程從入門到精通(21):HTTP消息的格式  回復(fù)  更多評論   

    看看http協(xié)議的定義就知道了,是通過http消息體發(fā)送post請求數(shù)據(jù)的
    2009-06-09 13:39 | 銀河使者

    # re: Java網(wǎng)絡(luò)編程從入門到精通(21):HTTP消息的格式  回復(fù)  更多評論   

    孫衛(wèi)琴老師有一本書Java網(wǎng)絡(luò)編程精解
    講的就是這些內(nèi)容,不過她書里面沒有一個完整的案例,講的知識很多,記住了,但不會用
    期待博主后面的案例
    2009-09-23 16:48 | 學(xué)生
    主站蜘蛛池模板: 亚洲第一区精品观看| 精品国产免费人成电影在线观看| 毛片视频免费观看| 亚洲熟妇无码久久精品| 日韩精品内射视频免费观看| 亚洲成av人影院| 久久国产精品成人免费| 亚洲色精品aⅴ一区区三区| 最近的2019免费中文字幕| 日韩亚洲一区二区三区| 久久免费国产视频| 亚洲日韩乱码中文无码蜜桃| 97人妻无码一区二区精品免费| 亚洲高清有码中文字| 美女被免费视频网站a国产 | 51午夜精品免费视频| 国产自偷亚洲精品页65页| 国产午夜精品免费一区二区三区| 亚洲人成在线观看| 午夜一区二区免费视频| 青青草国产免费国产是公开| 国产午夜亚洲精品理论片不卡| 在线观看肉片AV网站免费| 亚洲美女一区二区三区| 免费无码成人AV片在线在线播放| 欧亚一级毛片免费看| 亚洲avav天堂av在线不卡| 97碰公开在线观看免费视频| 日本系列1页亚洲系列| 日韩亚洲人成在线综合日本| 在线看片v免费观看视频777| 黄网站色视频免费看无下截| 亚洲AV日韩AV天堂一区二区三区| 免费a级毛片无码a∨蜜芽试看| 日本特黄特色AAA大片免费| 亚洲国产精品婷婷久久| 国产精品国产午夜免费福利看| 美女网站在线观看视频免费的| 亚洲国产一区在线观看| 亚洲熟伦熟女新五十路熟妇 | 亚洲资源在线视频|