HTTP TCP Socket

一:HTTP版本簡介

這里我把HTTP版本簡單分為三類:1.1之前,1.1,2.0,針對這三類做個主要差異的介紹:

1.HTTP 1.1之前

不支持持久連接脸狸。一旦服務(wù)器對客戶端發(fā)出響應(yīng)就立即斷開TCP連接

無請求頭跟響應(yīng)頭

客戶端的前后請求是同步的。下一個請求必須等上一個請求從服務(wù)端拿到響應(yīng)后才能發(fā)出藐俺,有點(diǎn)類似多線程的同步機(jī)制炊甲。

2.HTTP 1.1(主流版本)

與1.1之前的版本相比,做了以下性能上的提升

增加請求頭跟響應(yīng)頭

支持持久連接欲芹∏浞龋客戶端通過請求頭中指定Connection為keep-alive告知服務(wù)端不要在完成響應(yīng)后立即釋放連接。HTTP是基于TCP的菱父,在HTTP 1.1中一次TCP連接可以處理多次HTTP請求

客戶端不同請求之間是異步的颈娜。下一個請求不必等到上一個請求回來后再發(fā)出,而可以連續(xù)發(fā)出請求滞伟,有點(diǎn)類似多線程的異步處理揭鳞。

3.HTTP 2.0

本著向下兼容的原則炕贵,1.1版本有的特性2.0都具備梆奈,也使用相同的API。但是2.0將只用于https網(wǎng)址称开。由于2.0的普及還需要比較長的一段時間亩钟。

我們重點(diǎn)關(guān)注一下當(dāng)前1.1版本所做幾點(diǎn)改變乓梨。支持持久連接有什么好處呢?HTTP是基于TCP連接的清酥,如果連接被頻繁地啟動然后斷開就會花費(fèi)很多資源在TCP三次握手以及四次揮手上扶镀,效率低下。以請求一個網(wǎng)頁為例焰轻,我們知道臭觉,一個html網(wǎng)頁上的圖片資源并不是直接嵌入在網(wǎng)頁上,而只是提供url辱志,圖片仍需要額外發(fā)HTTP 請求去下載蝠筑。一個網(wǎng)頁從請求到最終加載到本地往往需要經(jīng)過過個HTTP請求。在1.1版本之前請求一個網(wǎng)頁就需要發(fā)生多次"握手-揮手"的過程揩懒,每次連接之間相互獨(dú)立什乙;而1.1及之后的版本最少只需要一次就夠。

再來就是請求異步已球,其好處參考多線程異步處理臣镣,在此不展開。

以上特性可以用圖1.1表示:

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?圖1.1 異步請求

我們可以看到:1智亮、N次請求其實(shí)只建立了1次TCP連接忆某,2、N次請求連續(xù)異步發(fā)出鸽素。

二:HTTP褒繁、Socket、TCP的區(qū)別

這三個概念經(jīng)常被談到馍忽,也是比較容易被混掉的概念棒坏。在回顧之前我們先看一下這三者在TCP/IP協(xié)議族中的位置關(guān)系:

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?圖2.1 層次關(guān)系

HTTP是應(yīng)用層的協(xié)議,更靠近用戶端遭笋;TCP是傳輸層的協(xié)議坝冕;而socket是從傳輸層上抽象出來的一個抽象層,本質(zhì)是接口瓦呼。所以本質(zhì)上三種還是很好區(qū)分的喂窟。盡管如此,有時候你可能會懵逼央串,HTTP連接磨澡、TCP連接、socket連接有什么區(qū)別质和?好吧稳摄,如果上面的圖解釋的還是不夠清楚的話,我們繼續(xù)往下看饲宿。

1厦酬、TCP連接與HTTP連接的區(qū)別

上文提過胆描,HTTP是基于TCP的,客戶端往服務(wù)端發(fā)送一個HTTP請求時第一步就是要建立與服務(wù)端的TCP連接仗阅,也就是先三次握手昌讲,“你好,你好减噪,你好”短绸。從HTTP 1.1開始支持持久連接,也就是一次TCP連接可以發(fā)送多次的HTTP請求筹裕。

小總結(jié):HTTP基于TCP

2鸠按、TCP連接與Socket連接的區(qū)別

在圖4.1中我們提到,socket層只是在TCP/UDP傳輸層上做的一個抽象接口層饶碘,因此一個socket連接可以基于連接目尖,也有可能基于UDP≡耍基于TCP協(xié)議的socket連接同樣需要通過三次握手建立連接瑟曲,是可靠的;基于UDP協(xié)議的socket連接不需要建立連接的過程豪治,不過對方能不能收到都會發(fā)送過去洞拨,是不可靠的,大多數(shù)的即時通訊IM都是后者负拟。

小總結(jié):Socket也基于TCP

3烦衣、HTTP連接與Socket連接的區(qū)別

區(qū)分這兩個概念是比較有意義的,畢竟TCP看不見摸不著掩浙,HTTP與Socket是實(shí)實(shí)在在能用到的花吟。

HTTP是短連接,Socket(基于TCP協(xié)議的)是長連接厨姚。盡管HTTP1.1開始支持持久連接衅澈,但仍無法保證始終連接。而Socket連接一旦建立TCP三次握手谬墙,除非一方主動斷開今布,否則連接狀態(tài)一直保持。

HTTP連接服務(wù)端無法主動發(fā)消息拭抬,Socket連接雙方請求的發(fā)送先后限制部默。這點(diǎn)就比較重要了,因?yàn)樗鼘Q定二者分別適合應(yīng)用在什么場景下造虎。HTTP采用“請求-響應(yīng)”機(jī)制傅蹂,在客戶端還沒發(fā)送消息給服務(wù)端前,服務(wù)端無法推送消息給客戶端累奈。必須滿足客戶端發(fā)送消息在前贬派,服務(wù)端回復(fù)在后。Socket連接雙方類似peer2peer的關(guān)系澎媒,一方隨時可以向另一方喊話搞乏。

4、問題來了:什么時候該用HTTP戒努,什么時候該用socket

這個問題的提出是很自然而然的请敦。當(dāng)你接到一個與另一方的網(wǎng)絡(luò)通訊需求,自然會考慮用HTTP還是用Socket储玫。

用HTTP的情況:雙方不需要時刻保持連接在線侍筛,比如客戶端資源的獲取、文件上傳等撒穷。

用Socket的情況:大部分即時通訊應(yīng)用(QQ匣椰、微信)、聊天室端礼、蘋果APNs等

在iOS中禽笑,發(fā)HTTP請求一般用原生的NSURLConnection、NSURLSession或者開源的AFNetWorking(推薦)蛤奥、ASIHttpRequest(已停止更新)佳镜。連接Socket連接我用的比較多是robbiehanson大神的CocoaAsyncSocket(XMPPFramework也是出自他手)。

三:小結(jié)

以上就是關(guān)于HTTP與TCP的一些區(qū)別凡桥,歡迎留言蟀伸,如果不對的地方還請不吝指出,謝謝缅刽!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末啊掏,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子衰猛,更是在濱河造成了極大的恐慌脖律,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,402評論 6 499
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件腕侄,死亡現(xiàn)場離奇詭異小泉,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)冕杠,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,377評論 3 392
  • 文/潘曉璐 我一進(jìn)店門微姊,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人分预,你說我怎么就攤上這事兢交。” “怎么了笼痹?”我有些...
    開封第一講書人閱讀 162,483評論 0 353
  • 文/不壞的土叔 我叫張陵配喳,是天一觀的道長酪穿。 經(jīng)常有香客問我,道長晴裹,這世上最難降的妖魔是什么被济? 我笑而不...
    開封第一講書人閱讀 58,165評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮涧团,結(jié)果婚禮上只磷,老公的妹妹穿的比我還像新娘。我一直安慰自己泌绣,他們只是感情好钮追,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,176評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著阿迈,像睡著了一般元媚。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上苗沧,一...
    開封第一講書人閱讀 51,146評論 1 297
  • 那天惠毁,我揣著相機(jī)與錄音,去河邊找鬼崎页。 笑死鞠绰,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的飒焦。 我是一名探鬼主播蜈膨,決...
    沈念sama閱讀 40,032評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼牺荠!你這毒婦竟也來了翁巍?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,896評論 0 274
  • 序言:老撾萬榮一對情侶失蹤休雌,失蹤者是張志新(化名)和其女友劉穎灶壶,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體杈曲,經(jīng)...
    沈念sama閱讀 45,311評論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡驰凛,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,536評論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了担扑。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片恰响。...
    茶點(diǎn)故事閱讀 39,696評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖涌献,靈堂內(nèi)的尸體忽然破棺而出胚宦,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 35,413評論 5 343
  • 正文 年R本政府宣布枢劝,位于F島的核電站井联,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏您旁。R本人自食惡果不足惜烙常,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,008評論 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望被冒。 院中可真熱鬧,春花似錦轮蜕、人聲如沸昨悼。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽率触。三九已至,卻和暖如春汇竭,著一層夾襖步出監(jiān)牢的瞬間葱蝗,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,815評論 1 269
  • 我被黑心中介騙來泰國打工细燎, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留两曼,地道東北人。 一個月前我還...
    沈念sama閱讀 47,698評論 2 368
  • 正文 我出身青樓玻驻,卻偏偏與公主長得像悼凑,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子璧瞬,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,592評論 2 353

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

  • 參考:http://www.2cto.com/net/201611/569006.html TCP HTTP UD...
    F麥子閱讀 2,947評論 0 14
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn)瘟忱,斷路器奥额,智...
    卡卡羅2017閱讀 134,651評論 18 139
  • 斜雨,微風(fēng)访诱,柳枝 輕輕悄悄 娉娉裊裊 泥土潤濕了空氣 教室披坏,食堂,寢室 行也嬌嬌 止也飄飄 文學(xué)隱匿了逍遙 昨歲盐数,...
    秋水識心閱讀 219評論 3 3
  • (1)酒頌 酒啊酒棒拂,酒是好酒!中國之酒文化燦爛悠久。 因?yàn)橛辛司浦闾耄瑹o數(shù)英雄竟風(fēng)流谜诫。...
    無為和尚閱讀 686評論 1 2
  • “你知道嗎?阿成和小雅離婚了9サS骺酢!” 看見閨蜜發(fā)過來的這條消息我都驚呆了牢屋,以為自己看錯了且预。我不過在老家呆了幾...
    儀琳閱讀 472評論 0 0