HTTP協(xié)議

HTTP協(xié)議

協(xié)議簡介

HTTP是網頁瀏覽器與網站服務器之間通信的標準協(xié)議途蒋。它是一個客戶端終端(用戶)和服務器端(網站)請求和應答的標準(TCP)猛遍。通過使用網頁瀏覽器、網絡爬蟲或者其它的工具号坡,客戶端發(fā)起一個HTTP請求到服務器上指定端口(默認端口為80)懊烤。我們稱這個客戶端為用戶代理程序(user agent)。應答的服務器上存儲著一些資源宽堆,比如HTML文件和圖像腌紧。我們稱這個應答服務器為源服務器(origin server)畜隶。在用戶代理和源服務器中間可能存在多個“中間層”,比如代理服務器籽慢、網關或者隧道(tunnel)。所以如果要提高用戶和源服務器之間的并發(fā)能力跛锌,一般是優(yōu)化網關(比如ngnix)极景,或者使用隧道優(yōu)化技術(比如japronto)驾茴。

盡管TCP/IP協(xié)議是互聯(lián)網上最流行的應用,HTTP協(xié)議中晨缴,并沒有規(guī)定必須使用它或它支持的層峡捡。事實上筑悴,HTTP可以在任何互聯(lián)網協(xié)議上阁吝,或其他網絡上實現(xiàn)械拍。HTTP假定其下層協(xié)議提供可靠的傳輸。因此甲馋,任何能夠提供這種保證的協(xié)議都可以被其使用迄损。因此也就是其在TCP/IP協(xié)議族使用TCP作為其傳輸層。

通常芹敌,由HTTP客戶端發(fā)起一個請求,創(chuàng)建一個到服務器指定端口(默認是80端口)的TCP連接拗引。HTTP服務器則在那個端口監(jiān)聽客戶端的請求幌衣。一旦收到請求,服務器會向客戶端返回一個狀態(tài)哼凯,比如"HTTP/1.1 200 OK"楚里,以及返回的內容,如請求的文件班缎、錯誤消息、或者其它信息蔑祟。

HTTP工作原理

HTTP協(xié)議定義Web客戶端如何從Web服務器請求Web頁面疆虚,以及服務器如何把Web頁面?zhèn)魉徒o客戶端。HTTP協(xié)議采用了請求/響應模型罢屈∑ぃ客戶端向服務器發(fā)送一個請求報文,請求報文包含請求的方法鄙币、URL蹂随、協(xié)議版本、請求頭部和請求數據绩衷。服務器以一個狀態(tài)行作為響應激率,響應的內容包括協(xié)議的版本、成功或者錯誤代碼乒躺、服務器信息、響應頭部和響應數據曹货。

以下是 HTTP 請求/響應的步驟:

  1. 客戶端連接到Web服務器 一個HTTP客戶端讳推,通常是瀏覽器,與Web服務器的HTTP端口(默認為80)建立一個TCP套接字連接礼饱。例如究驴,http://www.luffycity.com

  2. 發(fā)送HTTP請求 通過TCP套接字蝴韭,客戶端向Web服務器發(fā)送一個文本的請求(Request)報文跑慕,一個請求報文由請求行摧找、請求頭部牢硅、空行和請求數據4部分組成减余。

  3. 服務器接受請求并返回HTTP響應(Response) Web服務器解析請求惩系,定位請求資源。服務器將資源復本寫到TCP套接字抒抬,由客戶端讀取晤柄。一個響應由狀態(tài)行、響應頭部惠勒、空行和響應數據4部分組成爬坑。

  4. 釋放連接TCP連接 若connection 模式為close,則服務器主動關閉TCP連接售担,客戶端被動關閉連接署辉,釋放TCP連接;若connection 模式為keepalive,則該連接會保持一段時間骑素,在該時間內可以繼續(xù)接收請求;

  5. 客戶端瀏覽器解析HTML內容 客戶端瀏覽器首先解析狀態(tài)行刚夺,查看表明請求是否成功的狀態(tài)代碼。然后解析每一個響應頭创橄,響應頭告知以下為若干字節(jié)的HTML文檔和文檔的字符集莽红“畎睿客戶端瀏覽器讀取響應數據HTML燃辖,根據HTML的語法對其進行格式化网棍,并在瀏覽器窗口中顯示。

例如:在瀏覽器地址欄鍵入URL氏身,按下回車之后會經歷以下流程:

  1. 瀏覽器向 DNS 域名解析服務器(一般無需特別配置)請求解析該 URL 中的域名所對應的 IP 地址;

  2. 解析出 IP 地址后惑畴,根據該 IP 地址和默認端口 80,和服務器建立TCP連接;

  3. 瀏覽器發(fā)出讀取文件(URL 中域名后面部分對應的文件)的HTTP 請求陷虎,該請求報文作為 TCP 三次握手的第三個報文的數據發(fā)送給服務器;

  4. 服務器對瀏覽器請求作出響應倒得,并把對應的 html 文本發(fā)送給瀏覽器;

  5. 釋放 TCP連接;

  6. 瀏覽器將該 html 文本解碼并顯示內容;

HTTP連接示意

我們可以看到霞掺,通常的HTTP協(xié)議中包括TCP的連接和斷開以及傳遞報文的功能。TCP協(xié)議在HTTP協(xié)議中起到傳輸層的作用缠劝。那么HTTP真正的嚴格定義就很清楚了骗灶,它是以網頁瀏覽器為客戶端,資源文件在服務器端耙旦,以TCP/IP為傳輸協(xié)議的一種通訊協(xié)議免都。它對應的套接字端口默認是80。

HTTP請求方法

HTTP/1.1協(xié)議中共定義了八種方法(也叫“動作”)來以不同方式操作指定的資源:

  1. GET 向指定的資源發(fā)出“顯示”請求脓规。

  2. HEAD 與GET方法一樣险领,都是向服務器發(fā)出指定資源的請求秒紧。只不過服務器將不傳回資源的本文部分挨下。它的好處在于,使用這個方法可以在不必傳輸全部內容的情況下绩聘,就可以獲取其中“關于該資源的信息”(元信息或稱元數據)耗啦。

  3. POST 向指定資源提交數據机杜,請求服務器進行處理(例如提交表單或者上傳文件)。數據被包含在請求本文中似将。POST會向服務器增加或修改數據蚀苛,而且多次提交會造成資源重復創(chuàng)建。但很多時候為了查找方便速度更快腋舌,數據庫往往采用自增鍵作為主鍵渗蟹。這時候無法用PUT來操作。只能用POST來操作授艰。

  4. PUT 向指定資源位置上傳更新或創(chuàng)建新內容世落。它與POST的區(qū)別是重復提交不會增加數據。但必須在客戶端明確知道數據資源的具體標識谷朝。有些在服務器端使用數據庫自增鍵作為主鍵的數據是無法用PUT來增改的忘古。但PUT能夠保證數據資源不會被打亂,所以原則上應該用PUT請求而非POST請求送朱。在設計數據庫時,經常使用的數據要設計成修改必須用PUT驶沼,數據主鍵不能是自增鍵。

  5. DELETE 請求服務器刪除Request-URI所標識的資源大年。

  6. TRACE 回顯服務器收到的請求翔试,主要用于測試或診斷复旬。

  7. OPTIONS 這個方法可使服務器傳回該資源所支持的所有HTTP請求方法。用'*'來代替資源名稱壁涎,向Web服務器發(fā)送OPTIONS請求,可以測試服務器功能是否正常運作怔球。

  8. CONNECT HTTP/1.1協(xié)議中預留給能夠將連接改為管道方式的代理服務器竟坛。通常用于SSL加密服務器的鏈接(經由非加密的HTTP代理服務器)。

關于HTTP請求方法的兩種主要方法的常識:

? GET提交的數據會放在URL之后流码,也就是請求行里面延刘,以?分割URL和傳輸數據,參數之間以&相連驾荣,如EditBook?name=test1&id=123456.(請求頭里面那個content-type做的這種參數形式普泡,后面講) POST方法是把提交的數據放在HTTP包的請求體中.

? GET提交的數據大小有限制(因為瀏覽器對URL的長度有限制),而POST方法提交的數據沒有限制.

2.3.4 HTTP消息詳解

HTTP消息可以分為客戶端請求(request)和服務器端響應(response)兩種歧匈。其中客戶端請求的格式如圖

客戶端請求格式

所示件炉。其中GET請求實際上是以URL的形式展現(xiàn)出來的。

HTTP客戶端請求(request)示例

而服務器端的響應(response)則格式如圖所示口糕。


服務器端響應格式

HTTP響應的示例如下圖所示:


服務器端響應示例
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末景描,一起剝皮案震驚了整個濱河市秀撇,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌说搅,老刑警劉巖虏等,帶你破解...
    沈念sama閱讀 206,968評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件适肠,死亡現(xiàn)場離奇詭異,居然都是意外死亡敦跌,警方通過查閱死者的電腦和手機逛揩,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,601評論 2 382
  • 文/潘曉璐 我一進店門辩稽,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人逞泄,你說我怎么就攤上這事「餮瑁” “怎么了到千?”我有些...
    開封第一講書人閱讀 153,220評論 0 344
  • 文/不壞的土叔 我叫張陵憔四,是天一觀的道長望抽。 經常有香客問我履婉,道長,這世上最難降的妖魔是什么辑奈? 我笑而不...
    開封第一講書人閱讀 55,416評論 1 279
  • 正文 為了忘掉前任已烤,我火速辦了婚禮,結果婚禮上稍计,老公的妹妹穿的比我還像新娘裕循。我一直安慰自己,他們只是感情好剥哑,可當我...
    茶點故事閱讀 64,425評論 5 374
  • 文/花漫 我一把揭開白布株婴。 她就那樣靜靜地躺著,像睡著了一般大审。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上徒扶,一...
    開封第一講書人閱讀 49,144評論 1 285
  • 那天酷愧,我揣著相機與錄音,去河邊找鬼溶浴。 笑死管引,一個胖子當著我的面吹牛,可吹牛的內容都是我干的谅将。 我是一名探鬼主播,決...
    沈念sama閱讀 38,432評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼逊躁,長吁一口氣:“原來是場噩夢啊……” “哼隅熙!你這毒婦竟也來了?” 一聲冷哼從身側響起囚戚,我...
    開封第一講書人閱讀 37,088評論 0 261
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎匾二,沒想到半個月后拳芙,有當地人在樹林里發(fā)現(xiàn)了一具尸體,經...
    沈念sama閱讀 43,586評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡转培,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,028評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了惨寿。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,137評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡顺囊,死狀恐怖蕉拢,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情晕换,我是刑警寧澤,帶...
    沈念sama閱讀 33,783評論 4 324
  • 正文 年R本政府宣布益愈,位于F島的核電站,受9級特大地震影響敏释,放射性物質發(fā)生泄漏。R本人自食惡果不足惜摸袁,卻給世界環(huán)境...
    茶點故事閱讀 39,343評論 3 307
  • 文/蒙蒙 一靠汁、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧膀曾,春花似錦、人聲如沸财喳。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,333評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽泌枪。三九已至,卻和暖如春碌燕,著一層夾襖步出監(jiān)牢的瞬間继薛,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,559評論 1 262
  • 我被黑心中介騙來泰國打工慈鸠, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人灌具。 一個月前我還...
    沈念sama閱讀 45,595評論 2 355
  • 正文 我出身青樓咖楣,卻偏偏與公主長得像,于是被迫代替她去往敵國和親截歉。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 42,901評論 2 345

推薦閱讀更多精彩內容