http權(quán)威指南第一章

概述

本章是對(duì)http進(jìn)行簡(jiǎn)單介紹守屉。特別要關(guān)注以下方面的內(nèi)容:

  • web客戶端與服務(wù)器是如何通信的隅忿;
  • web的資源來(lái)自何方;
  • web的事務(wù)是怎樣工作的入客;
  • http通信所使用的報(bào)文格式;
  • 底層tcp網(wǎng)絡(luò)傳輸腿椎;
  • 不同的http協(xié)議變體桌硫;
  • 因特網(wǎng)上安裝的大量http架構(gòu)組件的一部分;

1.1 http-因特網(wǎng)多媒體的信使

http采用的是可靠的數(shù)據(jù)傳輸協(xié)議啃炸,因此用戶在訪問(wèn)信息時(shí)就不用擔(dān)心其完整性铆隘,而開(kāi)發(fā)人員可以專(zhuān)注于應(yīng)用程序特有細(xì)節(jié)的編寫(xiě)。

1.2 web客戶端與服務(wù)器

web的內(nèi)容存儲(chǔ)在web服務(wù)器上南用,web服務(wù)器使用的是http協(xié)議膀钠,因此也被稱(chēng)為http服務(wù)器」妫可能你每天都在使用http客戶端肿嘲,最常見(jiàn)的是web瀏覽器,比如ie筑公,firefox,chrom....它們向服務(wù)器請(qǐng)求http對(duì)象雳窟,并將這些對(duì)象顯示在你的屏幕上。

1.3資源

web服務(wù)器是web資源(web resource)的宿主匣屡。這些資源包括web文件系統(tǒng)中的靜態(tài)文件和根據(jù)不同請(qǐng)求內(nèi)容封救,身份拇涤,時(shí)間產(chǎn)生的資源。典型靜態(tài)文件:文本文件誉结,html文件鹅士,圖片,avi電影...惩坑。典型動(dòng)態(tài)資源:搜索引擎的結(jié)果如绸,股票交易的信息,在線購(gòu)買(mǎi)禮物...旭贬。

1.3.1媒體類(lèi)型

因特網(wǎng)有不同類(lèi)型的資源怔接,http要給每種通過(guò)web傳輸?shù)膶?duì)象打上名為mime(multipupose internet mail extension,多用途因特網(wǎng)郵件擴(kuò)展)類(lèi)型。這樣當(dāng)web瀏覽器獲得http鄉(xiāng)音后就可以正確處理這些對(duì)象稀轨。

1.3.2uri

每一個(gè)web服務(wù)器資源都有名字扼脐,這樣客戶端就可以說(shuō)明他們感興趣的資源是什么。服務(wù)器字原名被稱(chēng)為統(tǒng)一資源標(biāo)識(shí)符(uniform resource identifier ,uri).uri有兩種形式url和urn奋刽。

1.3.3url

統(tǒng)一資源定位符(uniform resource locator瓦侮,url)是資源變支付最常見(jiàn)的形式。大部分url遵循一種標(biāo)準(zhǔn)格式佣谐,該格式包含三個(gè)部分肚吏。

  • url的第一部分稱(chēng)為方案(scheme)說(shuō)明了資源所使用的協(xié)議,例如http協(xié)議狭魂。
  • 第二部分是服務(wù)器的因特網(wǎng)地址罚攀,例如www.baidu.com
  • 其余部分指定了web服務(wù)器上的某個(gè)資源雌澄。例如/index.html

1.3.4urn

統(tǒng)一資源名稱(chēng) (Uniform Resource Name, URN)斋泄。urn作為指定特定內(nèi)容的唯一名稱(chēng)使用的,與目前資源所在地?zé)o關(guān)镐牺。通過(guò)urn可以使用同一個(gè)名字通過(guò)多種網(wǎng)絡(luò)訪問(wèn)協(xié)議來(lái)訪問(wèn)資源炫掐。
比較重要的使用是p2p中的磁力鏈接是urn的一種實(shí)現(xiàn)。在本書(shū)的其他未知不會(huì)區(qū)分url和uri睬涧。

1.4事務(wù)

一個(gè)http事務(wù)是有一條請(qǐng)求指令和一個(gè)響應(yīng)結(jié)果組成的這種通信是通過(guò)名為http報(bào)文的格式化數(shù)據(jù)塊進(jìn)行的募胃。

1.4.1方法

http支持的不同請(qǐng)求指令,這些指令被稱(chēng)為http方法畦浓。每條http請(qǐng)求報(bào)文都包含一個(gè)方法痹束。這個(gè)方法告訴服務(wù)器要執(zhí)行什么動(dòng)作。例如get宅粥,post参袱,delete這些方法將在第三章進(jìn)行詳細(xì)介紹。

1.4.2狀態(tài)碼

每條http響應(yīng)返回時(shí)都會(huì)攜帶一個(gè)狀態(tài)碼。狀態(tài)碼是一個(gè)三位數(shù)字的代碼抹蚀,告知客戶端請(qǐng)求是否成功剿牺,或者采取其它動(dòng)作。

http狀態(tài)碼 描述
200 ok环壤,文檔正確返回
302 redirect(重定向)到其他地方獲取資源
404 not found(沒(méi)找到)無(wú)法找到這個(gè)資源

1.4.3web頁(yè)面中可以包含多個(gè)對(duì)象

應(yīng)用程序完成一項(xiàng)任務(wù)需要發(fā)布多個(gè)http事務(wù)晒来。比如:獲取一個(gè)包含了豐富圖片的web頁(yè)面。瀏覽器會(huì)執(zhí)行一個(gè)事務(wù)來(lái)獲取頁(yè)面布局的html“框架”然后發(fā)布另外的http事務(wù)來(lái)獲得其它的圖片郑现,java程序等湃崩。這些資源甚至可能位于不同的服務(wù)器。

1.5報(bào)文

http報(bào)文是由一行行簡(jiǎn)單的字符串組成的接箫。http報(bào)文都是純文本攒读,而不是二進(jìn)制代碼,人們可以很方便的進(jìn)行讀寫(xiě)辛友。
從web客戶端發(fā)送的報(bào)文稱(chēng)為請(qǐng)求報(bào)文(request message)薄扁。從服務(wù)器發(fā)送的報(bào)文稱(chēng)為響應(yīng)報(bào)文(response message)此外沒(méi)有其它類(lèi)型的http報(bào)文。
http報(bào)文包括三個(gè)部分:

  • 起始行
    報(bào)文的第一行就是起始行废累,在請(qǐng)求報(bào)文中用來(lái)說(shuō)明要做些什么邓梅,在響應(yīng)報(bào)文中說(shuō)明出現(xiàn)了什么情況。

  • 首部字段
    起始行后有零個(gè)或多個(gè)首部字段邑滨。每個(gè)首部字段包含一個(gè)名字和一個(gè)值日缨,為了便于解析,兩者之間用冒號(hào)來(lái)分割掖看。首部以一個(gè)空行結(jié)束

  • 主體
    空行之后就是可選的報(bào)文主體匣距,其中包含了所有類(lèi)型的數(shù)據(jù)。請(qǐng)求主題包括了要發(fā)送給web服務(wù)器的數(shù)據(jù)乙各,響應(yīng)主體中裝載了要返回給客戶端的數(shù)據(jù)墨礁,起始行和首部都是文本形式而且都是結(jié)構(gòu)化的,而主體則不同耳峦,主體中可以包含任意的二進(jìn)制數(shù)據(jù)。當(dāng)然也可以是文本焕毫。

1.6連接

1.6.1tcp

http是應(yīng)用層協(xié)議蹲坷,http無(wú)需操心網(wǎng)絡(luò)通信的具體細(xì)節(jié),它把聯(lián)網(wǎng)的具體的細(xì)節(jié)交給了網(wǎng)絡(luò)傳輸協(xié)議tcp邑飒。

tcp協(xié)議提供了:

  • 無(wú)差錯(cuò)的數(shù)據(jù)傳輸循签;
  • 按序傳輸(數(shù)據(jù)總會(huì)按照發(fā)送的順序到達(dá));
  • 未分段的數(shù)據(jù)流(可以在任何時(shí)刻以任意尺寸將數(shù)據(jù)發(fā)送出去)疙咸。

1.6.2連接县匠、ip地址、端口號(hào)

http客戶端向服務(wù)器發(fā)送報(bào)文前需要用網(wǎng)際協(xié)議(internet protocol ip)地址和端口號(hào)在客戶端和服務(wù)器之間建立一條tcp連接。

在tcp中乞旦,你需要知道服務(wù)器的ip地址以及服務(wù)器上運(yùn)行的特定軟件的tcp端口號(hào)贼穆。

url可以使用主機(jī)名(域名)或ip地址,使用主機(jī)名會(huì)被域名解析服務(wù)(domain name service ,dns)轉(zhuǎn)換為ip地址兰粉。如果不明確指定端口號(hào)故痊,會(huì)使用默認(rèn)的80端口。

基本瀏覽器的連接處理步驟如下:

  1. 瀏覽器從url中解析初服務(wù)器的主機(jī)名玖姑;
  2. 瀏覽器將服務(wù)器的主機(jī)名轉(zhuǎn)換為服務(wù)器的ip地址愕秫;
  3. 瀏覽器將端口號(hào)從url中解析出來(lái);焰络、
  4. 瀏覽器簡(jiǎn)歷一條與web服務(wù)器的tcp連接戴甩;
  5. 瀏覽器向服務(wù)器發(fā)送一條http請(qǐng)求報(bào)文;
  6. 服務(wù)器向?yàn)g覽器回送一條http響應(yīng)報(bào)文闪彼;
  7. 關(guān)閉連接甜孤,瀏覽器顯示文檔;

1.6.3使用tclnet實(shí)例

由于http使用了tcp傳輸協(xié)議备蚓,而且它是基于文本的沒(méi)有那種難以理解的二進(jìn)制课蔬,因此很容易直接與web服務(wù)器進(jìn)行對(duì)話。

telnet程序?qū)㈡I盤(pán)連接到某個(gè)目標(biāo)tcp端口郊尝,并將tcp端口的輸出回送到顯示屏上二跋,telnet常用于遠(yuǎn)程會(huì)話,但它幾乎可以連接所有的頭層皮服務(wù)器流昏,包括http服務(wù)器扎即。

雖然如此,但telnet做腳本自動(dòng)化十分復(fù)雜况凉,如果你想要使用更靈活的工具可以看看nc(netcat)通過(guò)nc可以方便地操作能夠udp和tcp的流量谚鄙。

1.7協(xié)議版本

不想寫(xiě),都是歷史

1.8web的結(jié)構(gòu)組件

  • 代理
    位于客戶端與服務(wù)器之間的http中間實(shí)體刁绒。
  • 緩存
    http的倉(cāng)庫(kù)闷营,使用常用頁(yè)面的副本可以保存在離客戶端更近的地方。
  • 網(wǎng)關(guān)
    連接其它應(yīng)用程序的特殊web服務(wù)器知市。
  • 隧道
    對(duì)http通信報(bào)文進(jìn)行盲轉(zhuǎn)發(fā)的特殊代理傻盟。
  • agent代理
    發(fā)起自動(dòng)http請(qǐng)求的半智能web客戶端。

1.8.1代理

http代理服務(wù)器是web安全嫂丙,應(yīng)用集成以及性能優(yōu)化的重要組成模塊娘赴。代理位于客戶端與服務(wù)器之間接受所欲客戶端的http請(qǐng)求。對(duì)用戶來(lái)說(shuō)跟啤,這些應(yīng)用程序就是一個(gè)代理诽表,代表用戶訪問(wèn)服務(wù)器唉锌。

出于安全考慮,通常會(huì)將代理作為轉(zhuǎn)發(fā)所有web流量的中間結(jié)點(diǎn)使用竿奏,代理還可以對(duì)請(qǐng)求和響應(yīng)進(jìn)行過(guò)濾袄简。

1.8.2緩存

web緩存(web cache)或代理緩存(proxy cache)是一種特殊的http代理服務(wù)器,可以將經(jīng)過(guò)代理傳送的常用文檔復(fù)制保存起來(lái)议双。下一個(gè)請(qǐng)求同意文檔的客戶端就可以享受緩存的私有副本所提供的服務(wù)了痘番。

1.8.3網(wǎng)關(guān)

網(wǎng)關(guān)(gateway)是一種特殊的服務(wù)器,作為其它服務(wù)器的中間實(shí)體使用平痰。通常將http流量轉(zhuǎn)換成其它協(xié)議汞舱。網(wǎng)管接受請(qǐng)求就好像自己是資源服務(wù)器一樣∽诠停客戶端可能并不知道自己在與一個(gè)網(wǎng)管進(jìn)行通信昂芜。

1.8.4隧道

隧道(tunnel)是建立起來(lái)之后,就回在兩條連接之間對(duì)原始數(shù)據(jù)進(jìn)行盲轉(zhuǎn)發(fā)的http應(yīng)用程序赔蒲。http隧道通常用來(lái)在一條或多條http連接上轉(zhuǎn)發(fā)非http數(shù)據(jù)泌神,轉(zhuǎn)發(fā)時(shí)不會(huì)窺探數(shù)據(jù)。

http隧道的一種常見(jiàn)用途是通過(guò)http連接承載加密的安全套接字(secure sockets layer舞虱,ssl)流量
這樣ssl流量就可以穿過(guò)只允許web流量通過(guò)的防火墻了

1.8.5agent代理

用戶agent代理是代表用戶發(fā)起http請(qǐng)求的客戶端程序欢际。所有發(fā)布web請(qǐng)求的應(yīng)用程序都是http agent代理到目前為止,我們肢體到web瀏覽器矾兜,但用戶agent代理還有很多形式损趋,例如:網(wǎng)絡(luò)爬蟲(chóng)(spiders)

1.9起始部分結(jié)束語(yǔ)

這就是我們對(duì)http的簡(jiǎn)要介紹。本章中椅寺,我們重點(diǎn)介紹了作為多媒體傳輸協(xié)議使用的http浑槽。簡(jiǎn)要說(shuō)明了http是怎樣使用uri來(lái)命名遠(yuǎn)程服務(wù)器上的多媒體資源的,粗略的介紹了如何利用http請(qǐng)求和響應(yīng)報(bào)文操縱遠(yuǎn)程服務(wù)器的多媒體資源返帕,最后考察了幾種使用http的web應(yīng)用程序桐玻。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市荆萤,隨后出現(xiàn)的幾起案子镊靴,更是在濱河造成了極大的恐慌,老刑警劉巖链韭,帶你破解...
    沈念sama閱讀 216,324評(píng)論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件邑闲,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡梧油,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,356評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門(mén)州邢,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)儡陨,“玉大人褪子,你說(shuō)我怎么就攤上這事∑澹” “怎么了嫌褪?”我有些...
    開(kāi)封第一講書(shū)人閱讀 162,328評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)胚股。 經(jīng)常有香客問(wèn)我笼痛,道長(zhǎng),這世上最難降的妖魔是什么琅拌? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,147評(píng)論 1 292
  • 正文 為了忘掉前任缨伊,我火速辦了婚禮,結(jié)果婚禮上进宝,老公的妹妹穿的比我還像新娘刻坊。我一直安慰自己,他們只是感情好党晋,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,160評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布谭胚。 她就那樣靜靜地躺著,像睡著了一般未玻。 火紅的嫁衣襯著肌膚如雪灾而。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,115評(píng)論 1 296
  • 那天扳剿,我揣著相機(jī)與錄音旁趟,去河邊找鬼。 笑死舞终,一個(gè)胖子當(dāng)著我的面吹牛轻庆,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播敛劝,決...
    沈念sama閱讀 40,025評(píng)論 3 417
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼余爆,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了夸盟?” 一聲冷哼從身側(cè)響起蛾方,我...
    開(kāi)封第一講書(shū)人閱讀 38,867評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎上陕,沒(méi)想到半個(gè)月后桩砰,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,307評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡释簿,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,528評(píng)論 2 332
  • 正文 我和宋清朗相戀三年亚隅,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片庶溶。...
    茶點(diǎn)故事閱讀 39,688評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡煮纵,死狀恐怖懂鸵,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情行疏,我是刑警寧澤匆光,帶...
    沈念sama閱讀 35,409評(píng)論 5 343
  • 正文 年R本政府宣布,位于F島的核電站酿联,受9級(jí)特大地震影響终息,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜贞让,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,001評(píng)論 3 325
  • 文/蒙蒙 一周崭、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧震桶,春花似錦休傍、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,657評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至柴墩,卻和暖如春忙厌,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背江咳。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,811評(píng)論 1 268
  • 我被黑心中介騙來(lái)泰國(guó)打工逢净, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人歼指。 一個(gè)月前我還...
    沈念sama閱讀 47,685評(píng)論 2 368
  • 正文 我出身青樓爹土,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親踩身。 傳聞我的和親對(duì)象是個(gè)殘疾皇子胀茵,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,573評(píng)論 2 353

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