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

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

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

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

    Java網(wǎng)絡(luò)編程從入門到精通(23):HTTP消息頭字段

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

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

    一、通用頭字段

    1. Connection

    這個(gè)字段只在HTTP1.1協(xié)議中存在。它決定了客戶端和服務(wù)器進(jìn)行了一次會(huì)話后,服務(wù)器是否立即關(guān)閉網(wǎng)絡(luò)連接。在客戶端最直接的表現(xiàn)是使用read方法(readLine方法也是一樣)讀完客戶端請(qǐng)求的Web資源后,是否立即返回-1readLine返回null)。Connection有兩個(gè)值:CloseKeep-Alive。當(dāng)使用ConnectionClose時(shí),和HTTP1.0協(xié)議是一樣的,當(dāng)read方法讀完數(shù)據(jù)時(shí)立即返回;而使用ConnectionKeep-Alive時(shí),read方法在讀完數(shù)據(jù)后還要被阻塞一段時(shí)間。直接讀取數(shù)據(jù)超時(shí)時(shí)間過后,還繼續(xù)往下執(zhí)行。在上一篇文章中討論的readHttpResponse(...)方法實(shí)現(xiàn)的第011行可以驗(yàn)證Connection的作用。下面讓我們來使用HTTP模擬器來做一個(gè)實(shí)驗(yàn)。

    (1)在HTTP模擬器中輸入如下的域名:

    www.baidu.com

    (2)HTTP模擬器中輸入如下的HTTP請(qǐng)求信息:

    GET / HTTP/1.1   
    Host: www.baidu.com

    (3)按兩下回車(輸入一個(gè)空行)后,發(fā)送請(qǐng)求消息,并得到如圖1如示的HTTP響應(yīng)消息頭:


    圖1

    (4)輸入yY后(在顯示http響應(yīng)頭后,要立刻輸入Y或y),顯示響應(yīng)消息的內(nèi)容。在顯示完內(nèi)容后,大約過了10秒鐘才進(jìn)入"host:port>"提示符(因?yàn)樵?/span>sendHttpRequest()的實(shí)現(xiàn)代碼中的004行設(shè)置了讀取數(shù)據(jù)超時(shí))。

    (5)在"host:port>"提示符下直接按回車,輸入最近一次使用的域名www.baidu.com和80端口。再次輸入如下的HTTP請(qǐng)求:

    GET / HTTP/1.1    
    Host: www.baidu.com
    Connection: close

    輸入完以上的HTTP請(qǐng)求后,重新執(zhí)行第3、4步操作。最后在顯示HTTP響應(yīng)消息內(nèi)容后,直接直入了"host:port>"提示符。除了這種方法,將請(qǐng)求的第一行改為GET / HTTP/1.0。這樣也可以無需等待直接結(jié)束。

    通過設(shè)置Connection,可以在下載Web資源(如多線程下載工具、Web瀏覽器等)后,立即斷開網(wǎng)絡(luò)連接,這樣可以有效地降低客戶機(jī)的資源消耗。

    2. Date

        這個(gè)Date頭字段描述了請(qǐng)求消息和響應(yīng)消息被創(chuàng)建的時(shí)間。這個(gè)字段值是一個(gè)HTTP-date類型,它的格式必須是GMT(格林尼治)時(shí)間,GMT時(shí)間是就是北京時(shí)間減8小時(shí)。下面是Date字段的一個(gè)例子:

    Date: Tue, 15 Nov 2007 08:12:31 GMT

    3. Content-Length

    指定消息實(shí)體的字節(jié)數(shù)。在請(qǐng)求消息中POST方法必須使用Content-Length來指定請(qǐng)求消息的實(shí)體內(nèi)容的字節(jié)數(shù)。在響應(yīng)消息中這個(gè)字段值指定了當(dāng)前HTTP響應(yīng)所返回的Web資源的字節(jié)數(shù)。

    二、HTTP請(qǐng)求消息頭字段

    1. Host

    Host字段用于指定客戶端所訪問的資源所在的主機(jī)名和端口號(hào)。如果端口號(hào)等于連接服務(wù)器時(shí)所使用的端口號(hào),則端口號(hào)可以省略。下面是一個(gè)使用Host字段的一個(gè)例子:

    Host: www.sina.com.cn

    這個(gè)字段是必須的,如果HTTP請(qǐng)求不包含這個(gè)字段,服務(wù)器將返回400(Bad Request)響應(yīng)狀態(tài)。

    2. Accept

    Accept字段頭確定客戶端可以接收的媒體類型。一般的格式是"*/*""類型/"子類型"。這個(gè)子段頭可以傳遞多個(gè)媒體類型,中間用","隔開。如下面是一個(gè)Accept的例子:

    Accept::image/gif,image/jpg

    如果請(qǐng)求頭使用上述的Accept字段值,則服務(wù)器端在動(dòng)態(tài)生成網(wǎng)頁的IMG頭時(shí)將首先包含gif格式的圖像,如果gif圖象不存在,則包含jpg格式的圖象。

    3. User-Agent

    這個(gè)字段頭用于指定客戶端是用什么訪問的服務(wù)器,如果是IE6瀏覽器,并且本機(jī)安裝了.net 2.0,則User-Agent會(huì)有如下的值:

    User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; SV1; Maxthon; .NET CLR 1.1.4322; .NET CLR 2.0.50727; InfoPath.1; InfoPath.2)

    服務(wù)器可以通過這個(gè)字段檢查客戶機(jī)的瀏覽器版本,并根據(jù)不同的版本來確定向客戶端發(fā)送的數(shù)據(jù)。

    4. Range

         Range字段頭通過服務(wù)器只傳輸一部分Web資源。這個(gè)字段頭可以用來實(shí)現(xiàn)斷點(diǎn)續(xù)傳功能。有很多下載工具就是通過這個(gè)字段頭進(jìn)行斷點(diǎn)續(xù)傳的。Range字段可以通過三種格式設(shè)置要傳輸?shù)淖止?jié)范圍:

    (1)Range: bytes=1000-2000

    傳輸范圍從10002000字節(jié)。

    (2)Range: bytes=1000-

    傳輸Web資源中第1000個(gè)字節(jié)以后的所有內(nèi)容。

    (3)Range bytes=1000

    傳輸最后1000個(gè)字節(jié)。

    三、HTTP響應(yīng)消息頭字段

    1. Accept-Ranges

    這個(gè)字段說明Web服務(wù)器是否支持Range(是否支持?jǐn)帱c(diǎn)續(xù)傳功能),如果支持,則返回Accept-Ranges: bytes,如果不支持,則返回Accept-Ranges: none。

    2. Content-Range

    指定了返回的Web資源的字節(jié)范圍。這個(gè)字段值的格式是:

    開始字節(jié)位置結(jié)束字節(jié)位置/Web資源的總字節(jié)數(shù)

    下面是一個(gè)使用Content-Range的例子:

    Content-Range1000-3000/5000

    測(cè)試

    HTTP模擬器中連接服務(wù)器files.cnblogs.com,并輸入如下的HTTP請(qǐng)求消息:

    GET /nokiaguy/HttpSimulator.rar HTTP/1.1
    Host:
    files.cnblogs.com
    Range: bytes=1000-

        返回的響應(yīng)消息頭如圖2所示:

    圖2

     從上圖可以看出,服務(wù)器files.cnblogs.com支持?jǐn)帱c(diǎn)繼傳功能。而且還可以驗(yàn)證Content-Length的值是當(dāng)前會(huì)話傳過來的字節(jié)數(shù),并不是Web資源的總的字節(jié)數(shù)。而Content-Range字段值中"/"后面的數(shù)才是Web資源總的字節(jié)數(shù)。

    3.  Location

    這個(gè)字段指定了上哪個(gè)新地址獲得新的Web資源。當(dāng)Web資源更換URL后,而一些老用戶不能及時(shí)得知這個(gè)新的URL;因此,在老用戶訪問原來的URL時(shí),使用Location將這個(gè)新的URL返回給客戶端。這個(gè)地址轉(zhuǎn)換對(duì)用戶來說是完全透明。

    下一篇:
    Java網(wǎng)絡(luò)編程從入門到精通(24):實(shí)現(xiàn)HTTP斷點(diǎn)續(xù)傳下載工具(附源代碼)





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

    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-23 13:04 銀河使者 閱讀(3225) 評(píng)論(0)  編輯  收藏 所屬分類: java 、 原創(chuàng)網(wǎng)絡(luò)編程

    主站蜘蛛池模板: h视频在线观看免费完整版| 日本在线观看免费高清| 亚洲毛片一级带毛片基地| 亚洲AV无码一区东京热| 亚洲色成人四虎在线观看| 亚洲另类自拍丝袜第1页| 亚洲小说图片视频| 亚洲av无码国产综合专区| 亚洲一区二区三区免费在线观看 | 99在线精品视频观看免费| 亚洲一区免费视频| 免费99精品国产自在现线| 免费看黄视频网站| 成年大片免费视频| 狠狠久久永久免费观看| 免费观看亚洲人成网站| 亚洲伊人成无码综合网| 亚洲人成人网站色www| 亚洲AV成人片色在线观看高潮| 91亚洲导航深夜福利| 亚洲欧洲尹人香蕉综合| 亚洲一区二区观看播放| 国产精品国产亚洲区艳妇糸列短篇| 国产成人亚洲综合在线| 国产三级在线免费观看| 亚洲av日韩综合一区久热| 亚洲AV无码专区亚洲AV桃| 无码免费又爽又高潮喷水的视频| yellow免费网站| 国产成人高清精品免费软件 | 黄色网址在线免费| xvideos永久免费入口| 国产成人无码区免费网站| 99爱在线观看免费完整版| 一区二区无码免费视频网站| 国产成人3p视频免费观看| 国产AV无码专区亚洲AV漫画| 在线电影你懂的亚洲| 亚洲日韩精品国产3区| 一本到卡二卡三卡免费高| 一区二区三区四区免费视频 |