Android網(wǎng)絡(luò)編程(二)構(gòu):HTTP協(xié)議報(bào)文基本結(jié)

HTTP協(xié)議屬于TCP/IP中的應(yīng)用層束凑,用于客戶端與服務(wù)端之間的通信杠园,客戶端請(qǐng)求訪問(wèn)文本或圖像等資源,服務(wù)器端則提供資源響應(yīng)筒狠,HTTP協(xié)議中猪狈,必定是客戶端先發(fā)起請(qǐng)求,服務(wù)端在未收到請(qǐng)求之前不會(huì)進(jìn)行響應(yīng)辩恼。這一章主要針對(duì)HTTP/1.1版本進(jìn)行講解雇庙,因?yàn)楹虷TTP/2.0有些區(qū)別谓形。后面有空會(huì)對(duì)比這兩個(gè)版本的區(qū)別。

1 HTTP在TCP/IP中的位置

HTTP與TCP/IP中其它協(xié)議的關(guān)系

找了張神圖状共,很清晰明了的標(biāo)明了HTTP的應(yīng)用層協(xié)議與其它層協(xié)議的關(guān)系套耕。

  • 1.1 DNS:屬于應(yīng)用層谁帕,域名解析系統(tǒng)峡继,通過(guò)把域名轉(zhuǎn)換為IP地址,因?yàn)榈讓拥木W(wǎng)絡(luò)層是通過(guò)IP來(lái)尋址的匈挖,域名它不認(rèn)識(shí)碾牌;
  • 1.2 TCP協(xié)議:屬于傳輸層,負(fù)責(zé)端對(duì)端的連接儡循,通過(guò)三次握手提供可靠性連接舶吗;
  • 1.3 IP協(xié)議:屬于網(wǎng)絡(luò)層,負(fù)責(zé)把上面要傳輸?shù)臄?shù)據(jù)從一臺(tái)主機(jī)打包帶到目標(biāo)IP主機(jī)上择膝;

2 HTTP協(xié)議請(qǐng)求與響應(yīng)頭

HTTP協(xié)議通過(guò)客戶端請(qǐng)求和服務(wù)端的響應(yīng)來(lái)建立通信誓琼,所以必須請(qǐng)求和響應(yīng)的信息必須得按照特定的套路來(lái),不然雙方就不認(rèn)識(shí)肴捉,比如說(shuō)腹侣,給日本人打電話先你得先確認(rèn)好用哪種語(yǔ)言進(jìn)行溝通,這個(gè)舉例有些蒼白齿穗,但是Who Care傲隶!

2.1 請(qǐng)求報(bào)文

客戶端請(qǐng)求的格式我們稱之為請(qǐng)求報(bào)文,由請(qǐng)求的方法窃页,URI跺株,HTTP協(xié)議的版本號(hào),請(qǐng)求的字段(可選)脖卖,還有請(qǐng)求的內(nèi)容(可選)構(gòu)成乒省。


請(qǐng)求的套路:請(qǐng)求報(bào)文

請(qǐng)求方法、請(qǐng)求URI和協(xié)議版本號(hào)構(gòu)成請(qǐng)求行畦木,請(qǐng)求首部是可選的作儿,包括請(qǐng)求首部,通用首部馋劈,實(shí)體首部攻锰,報(bào)文主體與報(bào)文首部之間必須有空行,因?yàn)榉?wù)端是通過(guò)空行來(lái)判斷報(bào)文主體的妓雾。


請(qǐng)求報(bào)文結(jié)構(gòu)

下面講一下這些各個(gè)組成娶吞。

  • 2.1.1 請(qǐng)求方法:首先,你客戶端需要服務(wù)端提供服務(wù)械姻,你首先要讓服務(wù)器知道你要干嘛妒蛇,是洗腳還是按摩或者一條龍机断,不同的請(qǐng)求意圖價(jià)位可是不一樣的,服務(wù)器應(yīng)對(duì)方式也會(huì)有所區(qū)別绣夺。
    2.1.1.1 GET方法:獲取資源吏奸。
    2.1.1.2 POST方法:獲取資源的時(shí)候帶上傳輸實(shí)體,GET也可以陶耍,但GET一般不這樣用奋蔚。
    2.1.1.3 PUT方法:傳輸實(shí)體文件。一般不用烈钞,因?yàn)椴话踩幢椒ㄗ陨頉](méi)有安全驗(yàn)證,導(dǎo)致誰(shuí)都可以
    給你的服務(wù)器傳文件毯欣。
    2.1.1.4 HEAD方法:和GET一樣獲取資源馒过,但是只拿響應(yīng)頭,服務(wù)端不返回報(bào)文主體酗钞;
    2.1.1.5 DELETE: 刪除指定的資源腹忽,作用和PUT相反;
    2.1.1.6 OPTIONS: 獲取服務(wù)端針對(duì)請(qǐng)求的URI支持的方法砚作;
    2.1.1.7 TRACE: 追蹤路徑窘奏,追蹤請(qǐng)求經(jīng)過(guò)的代理服務(wù)器,可以用來(lái)確認(rèn)請(qǐng)求經(jīng)過(guò)代理時(shí)進(jìn)行的操作偎巢;
    2.1.1.8 CONNECT:用隧道協(xié)議連接代理蔼夜,用隧道協(xié)議進(jìn)行通信。
  • 2.1.2 URI(統(tǒng)一資源標(biāo)識(shí)符 Uniform Resource Identifier)
    URI用于標(biāo)識(shí)資源压昼,而URL(統(tǒng)一資源定位符)是用于標(biāo)識(shí)互聯(lián)網(wǎng)資源求冷,URL是狹義的概念,URI是廣義的概念窍霞,URI包含URL匠题,在RFC文檔中,已經(jīng)不再使用URL但金,轉(zhuǎn)用URI韭山,絕對(duì)URI的格式為


  • 2.1.3 客戶端使用的HTTP協(xié)議版本,顧名思義冷溃,HTTP協(xié)議的版本號(hào)
    HTTP/0.9(出現(xiàn)的時(shí)候沒(méi)有作為標(biāo)準(zhǔn))钱磅,HTTP/1.0(開(kāi)始作為標(biāo)準(zhǔn)),
    HTTP/1.1(目前的普及版本)似枕,HTTP/2.0(最新版本盖淡,正在快速普及的版本)。
  • 2.1.4 請(qǐng)求首部字段
    需要服務(wù)端處理的請(qǐng)求內(nèi)容或?qū)傩栽浼撸梢蕴砑右恍└郊拥囊笸食伲@一塊的字段超級(jí)多冗恨,后面再講。
  • 2.1.5 內(nèi)容實(shí)體
    客戶端要發(fā)送數(shù)據(jù)內(nèi)容味赃,比如用POST請(qǐng)求附加的文件和字段就是加在這里掀抹。

2.2 響應(yīng)報(bào)文

收到客戶端的大佬請(qǐng)求后,服務(wù)端會(huì)返回對(duì)應(yīng)的請(qǐng)求信息心俗,即響應(yīng)報(bào)文傲武,響應(yīng)報(bào)文主要包括服務(wù)器端的HTTP協(xié)議版本、狀態(tài)碼另凌、表示狀態(tài)碼的原因短語(yǔ)谱轨,這三者組成狀態(tài)行戒幔,除此之外還有響應(yīng)首部字段吠谢,以及響應(yīng)主體,整體結(jié)構(gòu)除了狀態(tài)行诗茎,其它部分結(jié)構(gòu)和請(qǐng)求報(bào)文類似工坊。


響應(yīng)的套路:響應(yīng)報(bào)文

報(bào)文主體和首部字段之間有一個(gè)必不可少的空行。


響應(yīng)報(bào)文結(jié)構(gòu)

這里也大概講一下響應(yīng)報(bào)文各部分信息:

  • 2.2.1 協(xié)議版本
    服務(wù)器端使用的HTTP協(xié)議版本號(hào)
  • 2.2.2 狀態(tài)碼和原因短語(yǔ):這兩個(gè)是孿生的敢订,狀態(tài)碼會(huì)伴隨著描述狀態(tài)碼的原因短語(yǔ)王污,我們客戶端就是通過(guò)狀態(tài)碼來(lái)判斷請(qǐng)求是成功了還是失敗了,狀態(tài)碼以3位數(shù)字組成楚午,主要分為下面幾類
    2.2.2.1 1xx 信息性狀態(tài)碼昭齐,表示請(qǐng)求正在處理中
    2.2.2.2 2xx 請(qǐng)求成功狀態(tài)碼,請(qǐng)求正常處理完成矾柜,常用的有200阱驾,204,206
    2.2.2.3 3xx 重定向狀態(tài)碼怪蔑,需要進(jìn)行一些附加的操作才能完成請(qǐng)求里覆,常用的有301,302缆瓣,303喧枷,307
    2.2.2.4 4xx 客戶端錯(cuò)誤狀態(tài)碼,表示客戶端的請(qǐng)求存在錯(cuò)誤弓坞,常用的有400隧甚,401,403渡冻,404
    2.2.2.5 5xx 服務(wù)器端錯(cuò)誤狀態(tài)碼戚扳,表示服務(wù)器端處理發(fā)生錯(cuò)誤,常用的有500菩帝,503
    大概碼一下這些常用的咖城,以后翻起來(lái)也方便不是茬腿。
狀態(tài)碼 原因短語(yǔ) 原因短語(yǔ)
200 OK 成功處理客戶端發(fā)來(lái)的請(qǐng)求
204 No Content 成功處理請(qǐng)求,但不返回主體內(nèi)容宜雀,通常用于客戶端向服務(wù)器發(fā)送信息而服務(wù)器無(wú)需返回新內(nèi)容的情況下使用
206 Partial Content 客戶端進(jìn)行范圍請(qǐng)求切平,即GET方法要求獲取資源的部分內(nèi)容
301 Moved Permanently 永久重定向,所請(qǐng)求的資源已經(jīng)更換URI了
302 Found 臨時(shí)重定向辐董,所請(qǐng)求的資源暫時(shí)更換成新的URI
303 See Other 資源存在另一個(gè)URI悴品,明確要求客戶端采用GET方法獲取資源
304 Not Modified 表示客戶端帶有附加條件請(qǐng)求資源時(shí),服務(wù)器端已找到資源简烘,但是不滿足客戶端的附加條件苔严,3xx里的奇葩,因?yàn)楦囟ㄏ驔](méi)關(guān)系
307 Temporary Redirect 臨時(shí)重定向孤澎,和302有一樣的意思届氢,滿足特定瀏覽器需求
400 Bad Request 請(qǐng)求報(bào)文中存在語(yǔ)法錯(cuò)誤
401 Unauthorized 表示請(qǐng)求的內(nèi)容需要有身份認(rèn)證信息,嗯覆旭,大概就是你權(quán)限還不夠的意思
403 Forbidden 服務(wù)器拒絕服務(wù)退子,沒(méi)有為什么,就是拒絕
404 Not Found 服務(wù)器找不到對(duì)應(yīng)請(qǐng)求的資源型将,在服務(wù)器想委婉拒絕你的時(shí)候也會(huì)用這個(gè)借口
500 Internal Server Error 什么都不用說(shuō)了寂祥,服務(wù)器端出現(xiàn)bug了
503 Service Unavailable 還請(qǐng)求個(gè)蛋啊,服務(wù)器已經(jīng)掛了

請(qǐng)求報(bào)文還有響應(yīng)報(bào)文的首部字段還沒(méi)有細(xì)講七兜,因?yàn)檫@些字段實(shí)在太多了丸凭,看緣分,后面再碼一下腕铸,就當(dāng)做掃盲了惜犀。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市恬惯,隨后出現(xiàn)的幾起案子向拆,更是在濱河造成了極大的恐慌,老刑警劉巖酪耳,帶你破解...
    沈念sama閱讀 207,113評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件浓恳,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡碗暗,警方通過(guò)查閱死者的電腦和手機(jī)颈将,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評(píng)論 2 381
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)言疗,“玉大人晴圾,你說(shuō)我怎么就攤上這事≡胙伲” “怎么了死姚?”我有些...
    開(kāi)封第一講書人閱讀 153,340評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵人乓,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我都毒,道長(zhǎng)色罚,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書人閱讀 55,449評(píng)論 1 279
  • 正文 為了忘掉前任账劲,我火速辦了婚禮戳护,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘瀑焦。我一直安慰自己腌且,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,445評(píng)論 5 374
  • 文/花漫 我一把揭開(kāi)白布榛瓮。 她就那樣靜靜地躺著铺董,像睡著了一般。 火紅的嫁衣襯著肌膚如雪榆芦。 梳的紋絲不亂的頭發(fā)上柄粹,一...
    開(kāi)封第一講書人閱讀 49,166評(píng)論 1 284
  • 那天喘鸟,我揣著相機(jī)與錄音匆绣,去河邊找鬼。 笑死什黑,一個(gè)胖子當(dāng)著我的面吹牛崎淳,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播愕把,決...
    沈念sama閱讀 38,442評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼拣凹,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了恨豁?” 一聲冷哼從身側(cè)響起嚣镜,我...
    開(kāi)封第一講書人閱讀 37,105評(píng)論 0 261
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎橘蜜,沒(méi)想到半個(gè)月后菊匿,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,601評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡计福,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,066評(píng)論 2 325
  • 正文 我和宋清朗相戀三年跌捆,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片象颖。...
    茶點(diǎn)故事閱讀 38,161評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡佩厚,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出说订,到底是詐尸還是另有隱情抄瓦,我是刑警寧澤潮瓶,帶...
    沈念sama閱讀 33,792評(píng)論 4 323
  • 正文 年R本政府宣布,位于F島的核電站钙姊,受9級(jí)特大地震影響筋讨,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜摸恍,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,351評(píng)論 3 307
  • 文/蒙蒙 一悉罕、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧立镶,春花似錦壁袄、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 30,352評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至缭召,卻和暖如春栈顷,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背嵌巷。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 31,584評(píng)論 1 261
  • 我被黑心中介騙來(lái)泰國(guó)打工萄凤, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人搪哪。 一個(gè)月前我還...
    沈念sama閱讀 45,618評(píng)論 2 355
  • 正文 我出身青樓靡努,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親晓折。 傳聞我的和親對(duì)象是個(gè)殘疾皇子惑朦,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,916評(píng)論 2 344

推薦閱讀更多精彩內(nèi)容