Http協(xié)議

Http協(xié)議


HTTP(TyperText Transport Protocol)協(xié)議是互聯(lián)網(wǎng)上應(yīng)用最廣泛的一種網(wǎng)絡(luò)協(xié)議標(biāo)準(zhǔn)肝劲。所有WWW文件都必須遵守這個標(biāo)準(zhǔn)纺铭。目前普遍使用的版本是 HTTP1.1悔捶。

HTTP協(xié)議的特點(diǎn):

  • 支持C/S模式。
  • 簡單快速。客戶端向服務(wù)器請求服務(wù)時只需要傳送請求方法和路徑坛吁。
  • 靈活。HTTP允許傳輸任意類型的數(shù)據(jù)對象铐尚。正在傳輸?shù)念愋陀蒀ontent-Type加以標(biāo)記拨脉。
  • 無連接。無連接的含義是限制每次連接只處理一個請求宣增。服務(wù)器收到客戶端的請求玫膀,并收到客戶端的應(yīng)答后即斷開連接。
  • 無狀態(tài)爹脾。HTTP協(xié)議是無狀態(tài)協(xié)議帖旨。無狀態(tài)是指協(xié)議對于事物處理沒有記憶能力箕昭。

HTTP報(bào)文格式

HTTP報(bào)文是面向文本的,報(bào)文中的每一個字段都是一些ASCII碼串解阅,各個字段的長度是不確定的落竹。HTTP有兩類報(bào)文:即請求報(bào)文和響應(yīng)報(bào)文。

1瓮钥、請求報(bào)文

一個HTTP請求報(bào)文由 請求行(request line)、請求頭部(header)烹吵、空行和請求數(shù)據(jù)4部分組成碉熄。

請求報(bào)文的一般格式如下圖:

1).請求頭

請求頭由請求方法字段、URL字段和HTTP協(xié)議版本字段 組成肋拔,他們之間用空格分隔锈津。

例如:GET /index.html HTTP1.1

常見的HTTP請求方法有如下幾種

請求方法 含義
GET 請求獲取Request-URL所標(biāo)識的資源
POST 在Request-URL鎖標(biāo)識的資源后附加新的數(shù)據(jù)
HEAD 請求獲取由Request—URL所標(biāo)識的資源的響應(yīng)消息報(bào)頭
PUT 請求服務(wù)器存儲一個資源,并用Request-URL作為標(biāo)識符
DELETE 請求服務(wù)器刪除Request-URL所標(biāo)識的資源
TRACE 請求服務(wù)器回送收到的請求信息凉蜂,主要用于測試或診斷
CONNECT 保留將來使用
OPTIONS 請求查詢服務(wù)器性能琼梆,或查詢與資源相關(guān)的選項(xiàng)或需求
  • GET

GET方法要求服務(wù)器將URL定位的資源放在響應(yīng)報(bào)文的數(shù)據(jù)部分,回送給客戶端窿吩。使用GET時請求參數(shù)和對應(yīng)的值附加在URL后面茎杂,利用一個“?”分隔纫雁,參數(shù)之間使用“&”分隔煌往。傳參數(shù)的長度受限制。顯然這種方式不適合傳輸私密數(shù)據(jù)轧邪,另外由于不同瀏覽器對地址的字符限制有所不同刽脖,一般最多只能是1024個字符。所以如果傳輸大量的數(shù)據(jù)時也不適合使用GET忌愚。

  • POST

POST方式將請求參數(shù)封裝在HTTP請求數(shù)據(jù)中曲管,以名稱/值形式出現(xiàn),可以傳輸大量的數(shù)據(jù)硕糊,POST方式對傳輸數(shù)據(jù)的大小沒有限制院水,而且也不會顯示在URL中。

  • HEAD

HEAD就像GET简十,只不過服務(wù)器收到HEAD請求后只返回響應(yīng)頭衙耕,而不會返回響應(yīng)內(nèi)容。當(dāng)我們只需要查詢每個頁面的狀態(tài)時使用HEAD是非常高效的勺远。因?yàn)閭鬏斶^程中省去了頁面內(nèi)容橙喘。

POST與PUT的區(qū)別:

在HTTP中,PUT被定義為idempotent的方法胶逢,POST則不是厅瞎,這是一個很重要的區(qū)別饰潜。
如果一個方法重復(fù)執(zhí)行多次,產(chǎn)生的效果是一樣的和簸,那就是idempotent的彭雾。

在編程中.一個冪等操作的特點(diǎn)是其任意多次執(zhí)行所產(chǎn)生的影響均與一次執(zhí)行的影響相同。冪等函數(shù)锁保,或冪等方法薯酝,是指可以使用相同參數(shù)重復(fù)執(zhí)行,并能獲得相同結(jié)果的函數(shù)爽柒。這些函數(shù)不會影響系統(tǒng)狀態(tài)吴菠,也不用擔(dān)心重復(fù)執(zhí)行會對系統(tǒng)造成改變.

舉一個簡單的例子,假如有一個博客系統(tǒng)提供一個Web API浩村,模式是這樣http://superblogging/blogs/post/{blog-name}做葵,
很簡單,將{blog-name}替換為我們的blog名字心墅,往這個URI發(fā)送一個HTTP PUT或者POST請求酿矢,HTTP的body部分就是博文,這是一個很簡單的REST API例子怎燥。我們應(yīng)該用PUT方法還是POST方法瘫筐?取決于這個REST服務(wù)的行為是否是idempotent的,假如我們發(fā)送兩個
http://superblogging/blogs/post/Sample
請求铐姚,服務(wù)器端是什么樣的行為严肪?如果產(chǎn)生了兩個博客帖子,那就說明這個服務(wù)不是idempotent的谦屑,因?yàn)槎啻问褂卯a(chǎn)生了副作用了嘛驳糯;如果后一個請求把第一個請求覆蓋掉了,那這個服務(wù)就是idempotent的氢橙。前一種情況酝枢,應(yīng)該使用POST方法,后一種情況悍手,應(yīng)該使用PUT方法帘睦。

2)、請求頭部

請求頭部由關(guān)鍵字/值對組成坦康,每行一對竣付,關(guān)鍵字和值用英文冒號“:”分隔。請求頭部通知服務(wù)器有關(guān)于客戶端請求的信息滞欠,典型的請求頭有:

User-Agent:產(chǎn)生請求的瀏覽器類型古胆。

Accept:客戶端可識別的內(nèi)容類型列表。

Host:請求的主機(jī)名,允許多個域名同處一個IP地址逸绎,即虛擬主機(jī)惹恃。

3)、空行

最后一個請求頭之后是一個空行棺牧,發(fā)送回車符和換行符巫糙,通知服務(wù)器以下不再有請求頭。

4)颊乘、請求數(shù)據(jù)

請求數(shù)據(jù)不在GET方法中使用参淹,而是在POST方法中使用。POST方法適用于需要客戶填寫表單的場合乏悄。與請求數(shù)據(jù)相關(guān)的最常使用的請求頭是Content-Type和Content-Length浙值。

2、HTTP響應(yīng)報(bào)文

HTTP響應(yīng)報(bào)文也是由4部分組成纲爸,分別是:狀態(tài)行亥鸠、消息頭部妆够、空行和響應(yīng)正文识啦。格式如下圖:

正如你所見,在響應(yīng)中唯一真正的區(qū)別在于第一行中用狀態(tài)信息代替了請求信息神妹。狀態(tài)行(status line)通過提供一個狀態(tài)碼來說明所請求的資源情況颓哮。

狀態(tài)行格式如下:

HTTP-Version Status-Code Reason-Phrase CRLF

其中,HTTP-Version表示服務(wù)器HTTP協(xié)議的版本鸵荠;Status-Code表示服務(wù)器發(fā)回的響應(yīng)狀態(tài)代碼冕茅;Reason-Phrase表示狀態(tài)代碼的文本描述。狀態(tài)代碼由三位數(shù)字組成蛹找,第一個數(shù)字定義了響應(yīng)的類別姨伤,且有五種可能取值。

  • 1xx:指示信息--表示請求已接收庸疾,繼續(xù)處理乍楚。
  • 2xx:成功--表示請求已被成功接收、理解届慈、接受徒溪。
  • 3xx:重定向--要完成請求必須進(jìn)行更進(jìn)一步的操作。
  • 4xx:客戶端錯誤--請求有語法錯誤或請求無法實(shí)現(xiàn)金顿。
  • 5xx:服務(wù)器端錯誤--服務(wù)器未能實(shí)現(xiàn)合法的請求臊泌。

常見狀態(tài)代碼、狀態(tài)描述的說明如下揍拆。

  • 200 OK:客戶端請求成功渠概。
  • 400 Bad Request:客戶端請求有語法錯誤,不能被服務(wù)器所理解嫂拴。
  • 401 Unauthorized:請求未經(jīng)授權(quán)高氮,這個狀態(tài)代碼必須和WWW-Authenticate報(bào)頭域一起使用慧妄。
  • 403 Forbidden:服務(wù)器收到請求,但是拒絕提供服務(wù)剪芍。
  • 404 Not Found:請求資源不存在塞淹,舉個例子:輸入了錯誤的URL。
  • 500 Internal Server Error:服務(wù)器發(fā)生不可預(yù)期的錯誤罪裹。
  • 503 Server Unavailable:服務(wù)器當(dāng)前不能處理客戶端的請求饱普,一段時間后可能恢復(fù)正常,舉個例子:HTTP/1.1 200 OK(CRLF)状共。

3套耕、HTTP消息報(bào)頭

如前所述,HTTP消息由客戶端到服務(wù)器的請求和服務(wù)器到客戶端的響應(yīng)組成峡继。請求消息和響應(yīng)消息都是由開始行(對于請求消息開始行就是請求行冯袍,對于響應(yīng)消息,開始行是狀態(tài)行)碾牌、消息頭部(可選)康愤、空行(只有CRLF的行)、消息正文4部分組成舶吗。其中消息報(bào)頭包括普通報(bào)頭征冷、請求報(bào)頭、響應(yīng)報(bào)頭誓琼、實(shí)體報(bào)頭检激。消息報(bào)頭由頭部名/值對組成,每行一對腹侣,頭部字段名和值用“:”分隔叔收。其中消息報(bào)頭頭部字段名是大小寫無關(guān)的。報(bào)頭描述了客戶端或者服務(wù)器的屬性傲隶,被傳送的資源以及實(shí)體連接饺律。

4種不同類型的消息報(bào)頭分述如下:

  • 普通報(bào)頭:即可用于請求,也可用于響應(yīng)伦籍,不用于被傳輸實(shí)體蓝晒,只用于傳輸消息,是作為一個整體而不是特定的資源與事物關(guān)聯(lián)帖鸦。

  • 請求報(bào)頭:允許客戶端傳遞關(guān)于自身的信息和希望響應(yīng)的形式芝薇。請求報(bào)頭通知服務(wù)端有關(guān)客戶端的請求信息。典型的有如下幾種:

User-Agent:包含產(chǎn)生請求的操作系統(tǒng)作儿,瀏覽器類型等信息

Accept:客戶端可識別內(nèi)容類型列表洛二,用于指定客戶端接受那些類型的信息。

Host:請求主機(jī)名,允許多個域名同處一個IP地址晾嘶,即虛擬主機(jī)

  • 響應(yīng)報(bào)頭:服務(wù)器用于傳遞自身信息的響應(yīng)妓雾。如:

Location:用于重定向接收者到一個新的位置。Location響應(yīng)域名常用在更換域名的時候

Server:包含服務(wù)器用來處理請求的系統(tǒng)信息垒迂,與User-Agent請求報(bào)頭是相對應(yīng)的械姻。

  • 實(shí)體報(bào)頭:定義被傳送資源的信息。即可用于請求机断,也可用于響應(yīng)楷拳。請求和響應(yīng)消息都可以傳送一個實(shí)體。如:

Content-Encoding:被用作媒體類型的修飾符吏奸,它的值指示了已經(jīng)被應(yīng)用到實(shí)體正文的附加內(nèi)容的編碼欢揖。因而要獲得Content-Type報(bào)頭中所引用的媒體類型,必須采用響應(yīng)的解碼機(jī)制奋蔚。

Content-Language:描述了資源所用的自然語言她混。沒有設(shè)置該選項(xiàng)則認(rèn)為實(shí)體內(nèi)容將提供給所用語言閱讀。

Content-Length:用于致命實(shí)體正文的長度泊碑,以字節(jié)方式存儲十進(jìn)制來表示

Last-Modified:用于指示資源的最后修改日期和時間坤按。

注意:URL中的一些字符有特殊的含義,基本編碼規(guī)則如下:
空格換成(+)號蛾狗;正斜杠(/)分隔目錄和子目錄晋涣;問好(?)分隔URL和查詢仪媒;百分號(%)指定特殊字符沉桌;#號指定書簽;&號分隔參數(shù)算吩,有時也做為連接符留凭。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市偎巢,隨后出現(xiàn)的幾起案子蔼夜,更是在濱河造成了極大的恐慌,老刑警劉巖压昼,帶你破解...
    沈念sama閱讀 217,907評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件求冷,死亡現(xiàn)場離奇詭異,居然都是意外死亡窍霞,警方通過查閱死者的電腦和手機(jī)匠题,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,987評論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來但金,“玉大人韭山,你說我怎么就攤上這事。” “怎么了钱磅?”我有些...
    開封第一講書人閱讀 164,298評論 0 354
  • 文/不壞的土叔 我叫張陵梦裂,是天一觀的道長。 經(jīng)常有香客問我盖淡,道長年柠,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,586評論 1 293
  • 正文 為了忘掉前任褪迟,我火速辦了婚禮彪杉,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘牵咙。我一直安慰自己派近,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,633評論 6 392
  • 文/花漫 我一把揭開白布洁桌。 她就那樣靜靜地躺著渴丸,像睡著了一般。 火紅的嫁衣襯著肌膚如雪另凌。 梳的紋絲不亂的頭發(fā)上谱轨,一...
    開封第一講書人閱讀 51,488評論 1 302
  • 那天,我揣著相機(jī)與錄音吠谢,去河邊找鬼土童。 笑死,一個胖子當(dāng)著我的面吹牛工坊,可吹牛的內(nèi)容都是我干的献汗。 我是一名探鬼主播,決...
    沈念sama閱讀 40,275評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼王污,長吁一口氣:“原來是場噩夢啊……” “哼罢吃!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起昭齐,我...
    開封第一講書人閱讀 39,176評論 0 276
  • 序言:老撾萬榮一對情侶失蹤尿招,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后阱驾,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體就谜,經(jīng)...
    沈念sama閱讀 45,619評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,819評論 3 336
  • 正文 我和宋清朗相戀三年里覆,在試婚紗的時候發(fā)現(xiàn)自己被綠了丧荐。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,932評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡租谈,死狀恐怖篮奄,靈堂內(nèi)的尸體忽然破棺而出捆愁,到底是詐尸還是另有隱情,我是刑警寧澤窟却,帶...
    沈念sama閱讀 35,655評論 5 346
  • 正文 年R本政府宣布昼丑,位于F島的核電站,受9級特大地震影響夸赫,放射性物質(zhì)發(fā)生泄漏菩帝。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,265評論 3 329
  • 文/蒙蒙 一茬腿、第九天 我趴在偏房一處隱蔽的房頂上張望呼奢。 院中可真熱鬧,春花似錦切平、人聲如沸握础。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,871評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽禀综。三九已至,卻和暖如春苔严,著一層夾襖步出監(jiān)牢的瞬間定枷,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,994評論 1 269
  • 我被黑心中介騙來泰國打工届氢, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留欠窒,地道東北人。 一個月前我還...
    沈念sama閱讀 48,095評論 3 370
  • 正文 我出身青樓退子,卻偏偏與公主長得像岖妄,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子絮供,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,884評論 2 354

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

  • 一衣吠、概念(載錄于:http://www.cnblogs.com/EricaMIN1987_IT/p/3837436...
    yuantao123434閱讀 8,354評論 6 152
  • Http協(xié)議詳解 標(biāo)簽(空格分隔): Linux 聲明:本片文章非原創(chuàng)茶敏,內(nèi)容來源于博客園作者M(jìn)IN飛翔的HTTP協(xié)...
    Sivin閱讀 5,223評論 3 82
  • 其它參考地址HTTP狀態(tài)碼引言HTTP是一個屬于應(yīng)用層的面向?qū)ο蟮膮f(xié)議壤靶,由于其簡捷、快速的方式惊搏,適用于分布式超媒體...
    daf89232a846閱讀 1,125評論 0 5
  • 引言 HTTP是一個屬于應(yīng)用層的面向?qū)ο蟮膮f(xié)議贮乳,由于其簡捷、快速的方式恬惯,適用于分布式超媒體信息系統(tǒng)向拆。它于1990年...
    _燴面_閱讀 1,327評論 0 9
  • 昨天第一天寫,本來構(gòu)思的挺好酪耳,誰知道說著說著浓恳,就不安思路走了刹缝,被自己說的一大堆事給帶偏了,整的好像寫作文一樣颈将,還整...
    智御閱讀 150評論 0 2