日韩久久久精品,亚洲精品久久久久久久久久久,亚洲欧美一区二区三区国产精品 ,一区二区福利

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

系統(tǒng) 2151 0

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

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

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

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

1. HTTP 請(qǐng)求消息。

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

一、 HTTP 請(qǐng)求消息

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

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

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

部分)。

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

在請(qǐng)求消息頭的其他行是請(qǐng)求頭字段。每一行的格式是:

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

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

<!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> --> GET/HTTP/ 1.1
Host:www.csdn.net
Connection:Keep-Alive
Accept:*/*

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

<!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> --> POST/servlets-examples/servlet/RequestParamExampleHTTP/ 1.1
Host:localhost:
8888
Content-Length:
29
Connection:Close

firstname
= Bill&lastname = Gates

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

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

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

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

格式為HTTP/1.1或HTTP/1.0。這個(gè)版本號(hào)未必和請(qǐng)求消息頭的版本號(hào)一致;這主要是

因?yàn)椋?wù)器未必支持HTTP請(qǐng)求中所描述的HTTP版本,如使用GET / HTTP/1.1去請(qǐng)求服務(wù)器,當(dāng)服務(wù)器只支持HTTP1.0時(shí),那么就會(huì)返回HTTP/1.0。

2. 狀態(tài)碼。

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

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

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

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

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

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

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

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

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

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

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

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ì)了解每一個(gè)狀態(tài)碼所對(duì)應(yīng)的狀態(tài)信息,請(qǐng)參閱HTTP1.1的規(guī)范RFC2616。

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

HTTP 請(qǐng)求消息

<!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> --> GET/HTTP/ 1.1
Host:www.csdn.net

HTTP 響應(yīng)消息


<!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> --> 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:HITfromcachebj244.csdn.net
Connection:close
<!DOCTYPEhtml


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

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

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



國(guó)內(nèi)最棒的Google Android技術(shù)社區(qū)(eoeandroid),歡迎訪問(wèn)!

《銀河系列原創(chuàng)教程》 發(fā)布

《Java Web開發(fā)速學(xué)寶典》 出版,歡迎定購(gòu)

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


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對(duì)您有幫助就好】

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長(zhǎng)會(huì)非常 感謝您的哦?。?!

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 凤冈县| 司法| 略阳县| 策勒县| 句容市| 清水河县| 莎车县| 祁连县| 岳普湖县| 永宁县| 托克逊县| 台山市| 新乡市| 永清县| 开阳县| 淮南市| 襄垣县| 湖北省| 逊克县| 霍州市| 柳州市| 达尔| 南和县| 桐城市| 颍上县| 仲巴县| 临清市| 安阳市| 商水县| 泽库县| 大新县| 墨脱县| 云浮市| 大冶市| 利辛县| 阿克陶县| 确山县| 根河市| 玛沁县| 奉节县| 张家港市|