HTTP這個鬼 | 《圖解HTTP》

《圖解HTTP》

一 Web及網(wǎng)絡(luò)基礎(chǔ)

(一)什么是協(xié)議

計算機與網(wǎng)絡(luò)設(shè)備要相互通信蜕猫,雙方就必須基于相同的方法祭阀。比如如何探測到通信目標惦界、由哪一邊先發(fā)起通信傻工、使用哪種語言進行通信霞溪、怎樣結(jié)束通信等都需要事先確定孵滞。不同的硬件、操作系系統(tǒng)之間的通信鸯匹,所有的這―切都需要一種規(guī)則坊饶。這一規(guī)則稱為協(xié)議。

(二)TCP/IP協(xié)議的各層

1 協(xié)議四層

1 )應(yīng)用層

應(yīng)用層決定了向用戶提供應(yīng)用服務(wù)時通信的活動殴蓬。 比如匿级,F(xiàn)TP(File Transfer Protocol,文件傳輸協(xié)議)和 DNS ( Domain Name System染厅,域名系統(tǒng))

HTTP協(xié)議也處于該層痘绎。

2 )傳輸層

傳輸層提供處于網(wǎng)絡(luò)連接中的兩臺計算機之間的數(shù)據(jù)傳輸。在傳輸層有兩個性質(zhì)不同的協(xié)議:TCP(Transmission ?Control Proctocal肖粮,傳輸控制協(xié)議)和UDP(User Data Protocol, 用戶數(shù)據(jù)報協(xié)議)孤页。

3 )網(wǎng)絡(luò)層(又名網(wǎng)絡(luò)互連層)

網(wǎng)絡(luò)層用來處理在網(wǎng)絡(luò)上流的的數(shù)據(jù)包。數(shù)據(jù)包是網(wǎng)絡(luò)傳輸?shù)淖钚?shù)據(jù)單位涩馆。該層規(guī)定了通過怎樣的路徑(所謂的傳輸路線)到達對方計算機行施,并把數(shù)據(jù)包傳送給對方。...與對方計算機之間通過多臺計算機或網(wǎng)絡(luò)設(shè)備進行傳輸時魂那,網(wǎng)絡(luò)層所起的作用就是在眾多的選項內(nèi)選擇一條傳輸路線蛾号。

IP協(xié)議

IP協(xié)議的作用是把各種數(shù)據(jù)包傳送給對方。這需要滿足很多條件涯雅。其中兩個重要的條件是IP地址和MAC地址(Media Access Control Address)

IP地址指明了節(jié)點被分配到的地址鲜结,MAC地址是指網(wǎng)卡所屬的固定地址。IP地址可以和MAC地址進行配對斩芭。IP可變換轻腺,但MAC地址基本上不會更改。

IP間的通信依賴MAC地址划乖。在網(wǎng)絡(luò)上,通常是經(jīng)過多臺計算機和網(wǎng)絡(luò)設(shè)備中轉(zhuǎn)才能連接對方挤土。而在進行中轉(zhuǎn)時琴庵,會利用下一站中轉(zhuǎn)設(shè)備的MAC地址來搜索下一個中轉(zhuǎn)目標。這時仰美,會采用ARP協(xié)議(Address Resolution Protocol )迷殿。ARP協(xié)議是一種用以解析地址的協(xié)議,根據(jù)通信方的IP地址就可以反查出對應(yīng)的MAC地址咖杂。

4) 鏈路層(又名數(shù)據(jù)鏈路層庆寺,網(wǎng)絡(luò)接口層)

用來處理連接網(wǎng)絡(luò)的硬件部分。包括控制操作系統(tǒng)诉字、硬件的設(shè)備驅(qū)動懦尝、NIC(Network Interface Card, 網(wǎng)絡(luò)適配器知纷,即網(wǎng)卡)及光纖等物理可見部分。硬件上的范疇均在鏈路層的作用范圍之內(nèi)陵霉。

2 封裝

發(fā)送端在層與層之間傳輸數(shù)據(jù)時琅轧,每經(jīng)過一層時必定會被打上一個該層所屬的首部信息。反之踊挠,接收端在層與層傳輸數(shù)據(jù)時乍桂,每經(jīng)過一層會把對應(yīng)的首部消去。這種把數(shù)據(jù)信息包裝起來的做法稱為封裝(encapsulate)

3 三次握手策略

為了準確無誤地將數(shù)據(jù)送達目標處效床,TCP協(xié)議采用了三次握手策略睹酌。…握手過程中使用了TCP的標志(flag)--SYN(synchronize)和ACK(acknowledgement)剩檀。...發(fā)送端首先發(fā)送一個帶SYN標志的數(shù)據(jù)包給對方憋沿。接收端收到后,回傳一個帶有SYN/ACK標志的數(shù)據(jù)包以示傳達確認信息谨朝。最后發(fā)送端再回傳一個帶ACK標志的數(shù)據(jù)包卤妒,代表“握手”結(jié)束。

二 HTTP報文里的一些概念


范圍請求(Range Request)

指定范圍發(fā)出的請求(例如斷點續(xù)傳是一種應(yīng)用)

內(nèi)容協(xié)商(Content Negotiation)

客戶端和服務(wù)端就響應(yīng)的資源內(nèi)容進行交涉字币,然后提供給客戶最合適的資源则披。

例如根據(jù)瀏覽器默認語言顯示中英文版。根據(jù)OS類型切換手機版或PC版洗出。

三 與HTTP協(xié)作的Web服務(wù)器

(一)通信數(shù)據(jù)轉(zhuǎn)發(fā)程序:代理士复、網(wǎng)關(guān)、隧道

1 代理

代理可按是否使用緩存和是否修改報文分類

1)緩存代理(Caching Proxy)

轉(zhuǎn)發(fā)響應(yīng)時翩活,會預(yù)先將資源的副本(緩存)保存在代理服務(wù)器上阱洪。當代理再次接受到相同請求時,可以不從原服務(wù)器獲取資源菠镇,直接從緩存返回冗荸。

2)透明代理(Transparent Proxy)/非透明代理

轉(zhuǎn)發(fā)或響應(yīng)請求時不對報文加工的叫透明代理,反之為非透明代理利耍。

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

網(wǎng)關(guān)是轉(zhuǎn)發(fā)其他服務(wù)器通信數(shù)據(jù)的服務(wù)器蚌本,接收從客戶端發(fā)來的請求時,他就像自己擁有資源的源服務(wù)器一樣對請求進行處理隘梨。

網(wǎng)關(guān)和代理的區(qū)別是網(wǎng)關(guān)能使通信線路上的服務(wù)器提供非HTTP協(xié)議服務(wù)程癌。利用網(wǎng)關(guān)能提高通信的安全性,因為可以在客戶端和網(wǎng)關(guān)線路上加密以確保鏈接的安全轴猎。

3 隧道

隧道是在相隔甚遠的客戶端和服務(wù)器兩者之間中轉(zhuǎn)嵌莉,并保存雙方通信連接的應(yīng)用程序∧聿保可使用SSL等手段加密锐峭。隧道本身不解析HTTP請求中鼠。

(二)緩存

緩存指代理服務(wù)器或客戶端本地磁盤保存的資源副本。利用緩存可以減少對源服務(wù)器的訪問只祠,也節(jié)省了通信流量和通信時間兜蠕。

四 HTTP的安全隱患

(一)通信使用明文(不加密),內(nèi)容可能被竊聽

1)通信使用明文

即使通信經(jīng)過加密抛寝,只是有可能讓人無法破解報文信息的含義熊杨,但加密處理后的加密信息本身還是會被看到。

2)如何竊聽盗舰?

收集在互聯(lián)網(wǎng)上流動的數(shù)據(jù)包(幀)就可以了晶府。對于收集來的數(shù)據(jù)包的解析工作,可以交給抓包(Packet Capture)或嗅探器(Sniffer)工具钻趋。Wireshark是一種廣泛使用的抓包工具川陆。

3)解決方案:

HTTPS

加密處理防止竊聽÷唬可通過SSL(Secure Socket Layer较沪,安全套接層)或TLS(Transport Layer Security,安全傳輸協(xié)議)的組合使用失仁,加密通信尸曼。與SSL組合使用的HTTP叫HTTPS。

HTTPS是HTTP通信接口部分用SSL和TSL協(xié)議代替而已萄焦。通常控轿,HTTP直接和TCP通信。當使用SSL時拂封,則變?yōu)橄群蚐SL通信茬射,再由SSL和TCP通信。

使用SSL時冒签,速度會變慢

1是通信慢在抛。因為需增加SSL通信,增加通信量萧恕。和HTTP相比霜定,網(wǎng)絡(luò)負載可能會變慢2到100倍。2是大量消耗CPU及內(nèi)存資源廊鸥,導(dǎo)致處理速度變慢。因為SSL使用時辖所,在服務(wù)器和客戶端都要進行加密和解密的運算處理惰说,比起HTTP會更多消耗服務(wù)器和客戶端硬件資源。

(二)不驗證通信方的身份缘回,可能遭遇偽裝

1 HTTP弱的地方在于:

請求有可能去到已偽裝的服務(wù)器吆视、已偽裝的客戶端典挑;無法確定對方是否有訪問權(quán)限;無意義的請求也照單全收啦吧,無法阻止海量請求下的DoS攻擊(Denial of Service, 拒絕服務(wù)攻擊)

2 解決方案:密鑰您觉、證書

1)證書

證書由值得信任的第三方機構(gòu)頒發(fā),只要能確認通信方持有的證書授滓,就可判斷對方真實意圖琳水。

EV SSL證書(Extended Validation SSL Certificate)

該證書既可證明服務(wù)器是否規(guī)范,還可確認服務(wù)器運營企業(yè)是否真實存在般堆。

客戶端證書

客戶端證書需要購買在孝,按裝機量收取。

2)密鑰

-共享密鑰

加密和解密用同一個密鑰淮摔,也稱為對成性密鑰私沮。

-公開密鑰加密

發(fā)送密文的一方使用對方的公開密鑰(Public Key)進行加密處理,對方收到被加密的信息后,再使用自己的私有密鑰(private key)解密和橙。

數(shù)字認證機構(gòu)的業(yè)務(wù)流程

服務(wù)器的運營人員向數(shù)字認證機構(gòu)提出公開密鑰的申請仔燕。數(shù)字認證機構(gòu)在判明申請者的身份后,會對已申請的公開密鑰做數(shù)字簽名魔招,然后分配這個已簽名的密鑰晰搀,并把該公開密鑰放入公鑰證書后綁定在一起。...多數(shù)瀏覽器開發(fā)商發(fā)布版本時仆百,會事先在內(nèi)部植入常用認證機構(gòu)的公開密鑰厕隧。


(三)無法證明報文的完整性,可能已遭篡改

請求或響應(yīng)在傳輸圖中遭遇攻擊者攔截篡改俄周,叫中間人攻擊(Man-in-the-Middle Attack)

五 HTTP的性能瓶頸

HTTP最初是傳輸HTML文檔的協(xié)議吁讨,隨著Web用途的多樣,HTTP性能出現(xiàn)瓶頸峦朗。

(一)HTTP的性能瓶頸

一條連接上只可發(fā)送一個請求建丧;請求只能從客戶端開始〔ㄊ疲客戶端不可接受除響應(yīng)以外的指令翎朱;請求/響應(yīng)首部未經(jīng)壓縮就發(fā)送。首部信息越多延遲越大尺铣;每次都需要發(fā)送首部拴曲。首部冗長而相同,每次發(fā)送造成l浪費凛忿;有時不壓縮數(shù)據(jù)直接發(fā)送澈灼;

(二)解決方法

HTTP的追加協(xié)議

1 Ajax

Ajax(Asynchronous JavaScript and XML,異步JavaScript與XML技術(shù))是一種有效利用JavaScript和DOM(Document Object Model 文檔對象模型)的操作,以達到局部WEB頁面替換加載的異步通信手段。

Ajax的核心技術(shù)是名為XMLHTTPRequest的API叁熔,通過JavaScript腳本語言的調(diào)用就能和服務(wù)器進行HTTP通信委乌。能從已加載完畢的Web頁面發(fā)起請求,只更新局部頁面荣回。而利用Ajax實時從服務(wù)器獲取內(nèi)容遭贸,可能導(dǎo)致大量請求產(chǎn)生。

2 SPDY協(xié)議

這個協(xié)議試圖從協(xié)議級別消除HTTP性能瓶頸心软。它沒有完全改寫HTTP協(xié)議壕吹,而是在應(yīng)用層與運輸層間增加會話層實現(xiàn)。

它壓縮HTTP首部糯累,支持服務(wù)器主動向客戶端推送數(shù)據(jù)算利,服務(wù)器可以主動提示客戶端請求所需的資源。

但是由于SPDY基本上只是將單個域名(IP地址)的通信多路復(fù)用泳姐,所以當一個Web網(wǎng)站上使用多個域名下的資源效拭,改善效果就會受到限制。

3 WebSocket協(xié)議

推送功能:支持服務(wù)器向客戶端推送數(shù)據(jù)的推送功能

減少通信量:只要建立起WebSocket連接胖秒,就希望一直保持通信狀態(tài)缎患。和HTTP相比,不但每次連接時總開銷減少阎肝,而且由于WebSocket的首部信息很少挤渔,通信量也相應(yīng)減少了。

為何HTTP協(xié)議受眾如此廣泛风题?

企業(yè)和組織會設(shè)定防火墻判导。防火墻禁止非指定的協(xié)議和端口號的數(shù)據(jù)包通過。如果使用新協(xié)議必須修改防火墻的設(shè)置沛硅。

六 構(gòu)建Web內(nèi)容的技術(shù)

(一)HTML

超文本是一種文檔系統(tǒng)眼刃,可將文檔中任意位置的信息與其他信息(文本或圖片等)建立關(guān)聯(lián),即超鏈接文本摇肌。標記語言是指通過在文檔的某部分穿插特別的字符串標簽擂红,用來修飾文檔的語言。

HTML5標準不僅解決了瀏覽器間的兼容性問題围小,并且可把文本作為數(shù)據(jù)對待昵骤,更容易復(fù)用,動畫效果也更生動肯适。

(二)動態(tài)HTML

JavaScript

(三) WEB應(yīng)用相關(guān)

1)與WEB服務(wù)器及程序協(xié)作的CGI

Common Gateway Interface变秦,通用網(wǎng)關(guān)接口。是指服務(wù)器在接收到客戶端發(fā)送過來的請求后轉(zhuǎn)發(fā)給程序的一組機制框舔。使用CGI的程序叫CGI程序伴栓。

2)因Java而普及的Servlet

Servlet是一種能在服務(wù)器上創(chuàng)建動態(tài)內(nèi)容的程序。Servlet是用Java語言實現(xiàn)的一個接口。

CGI每次接到請求钳垮,程序都要跟著啟動一次,服務(wù)器負載很大额港。而Servlet直接在服務(wù)器上運行饺窿,負載小。

(四)數(shù)據(jù)發(fā)布的格式及語言

XML

從文檔中讀取數(shù)據(jù)比HTML簡單移斩。RSS和Atom都用到了XML

JSON(JavaScript Object Notation)

是一種以JavaScript的對象表示法為基礎(chǔ)的輕量級數(shù)據(jù)標記語言肚医。它讓數(shù)據(jù)更輕更純粹。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末向瓷,一起剝皮案震驚了整個濱河市肠套,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌猖任,老刑警劉巖你稚,帶你破解...
    沈念sama閱讀 218,858評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異朱躺,居然都是意外死亡刁赖,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,372評論 3 395
  • 文/潘曉璐 我一進店門长搀,熙熙樓的掌柜王于貴愁眉苦臉地迎上來宇弛,“玉大人,你說我怎么就攤上這事源请∏姑ⅲ” “怎么了?”我有些...
    開封第一講書人閱讀 165,282評論 0 356
  • 文/不壞的土叔 我叫張陵谁尸,是天一觀的道長舅踪。 經(jīng)常有香客問我,道長症汹,這世上最難降的妖魔是什么硫朦? 我笑而不...
    開封第一講書人閱讀 58,842評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮背镇,結(jié)果婚禮上咬展,老公的妹妹穿的比我還像新娘。我一直安慰自己瞒斩,他們只是感情好破婆,可當我...
    茶點故事閱讀 67,857評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著胸囱,像睡著了一般祷舀。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,679評論 1 305
  • 那天裳扯,我揣著相機與錄音抛丽,去河邊找鬼。 笑死饰豺,一個胖子當著我的面吹牛亿鲜,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播冤吨,決...
    沈念sama閱讀 40,406評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼蒿柳,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了漩蟆?” 一聲冷哼從身側(cè)響起垒探,我...
    開封第一講書人閱讀 39,311評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎怠李,沒想到半個月后圾叼,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,767評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡扔仓,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,945評論 3 336
  • 正文 我和宋清朗相戀三年褐奥,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片翘簇。...
    茶點故事閱讀 40,090評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡撬码,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出版保,到底是詐尸還是另有隱情呜笑,我是刑警寧澤,帶...
    沈念sama閱讀 35,785評論 5 346
  • 正文 年R本政府宣布彻犁,位于F島的核電站叫胁,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏汞幢。R本人自食惡果不足惜驼鹅,卻給世界環(huán)境...
    茶點故事閱讀 41,420評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望森篷。 院中可真熱鬧输钩,春花似錦、人聲如沸仲智。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,988評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽钓辆。三九已至剪验,卻和暖如春肴焊,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背功戚。 一陣腳步聲響...
    開封第一講書人閱讀 33,101評論 1 271
  • 我被黑心中介騙來泰國打工娶眷, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人疫铜。 一個月前我還...
    沈念sama閱讀 48,298評論 3 372
  • 正文 我出身青樓茂浮,卻偏偏與公主長得像,于是被迫代替她去往敵國和親壳咕。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,033評論 2 355

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