IOS —— 網絡那些事(上) - http協議

作為一名并不太合格的程序員,今天要分享學習的成果,竟然講的是網絡相關HTTP協議的事情。(也算是復習了)

乍看HTTP協議的內容著實是十分復雜的,涉及到十分多互聯網"底層"框架的東西。今天就先撇開這部分詳細內容。

簡單的來說說HTTP協議,以及連接的事項。

HTTP協議發展至今也有二十多年歷史,版本也從原來的1.0 進化到了2.0

那么還是一如既往,圖文理解比較簡單。

以下圖片以"下單"表示客戶端向服務器端發送數據

以"發貨"表示服務器端對客戶端的回應

"商家"表示服務器端(server) ,?"買家"表示客戶端(user)


HTTP協議1.0版

?

在解釋這張圖的含義之前,引用百度百科的一段話解釋下?HTTP協議 究竟是什么?

HTTP協議:

HTTP協議(HyperText Transfer Protocol,超文本傳輸協議)是用于從WWW服務器傳輸超文本到本地瀏覽器的傳輸協議。它可以使瀏覽器更加高效,使網絡傳輸減少。它不僅保證計算機正確快速地傳輸超文本文檔,還確定傳輸文檔中的哪一部分,以及哪部分內容首先顯示(如文本先于圖形)等。
HTTP是客戶端瀏覽器或其他程序與Web服務器之間的應用層通信協議。在Internet上的Web服務器上存放的都是超文本信息,客戶機需要通過HTTP協議傳輸所要訪問的超文本信息。HTTP包含命令和傳輸信息,不僅可用于Web訪問,也可以用于其他因特網/內聯網應用系統之間的通信,從而實現各類應用資源超媒體訪問的集成。

仔細閱讀完會發現,HTTP協議的作用和開篇時,我所描述的一樣。

你可以將買外賣的這件事情代入進來,傳輸協議實際上也可以當做是"下單"的過程。

在1996年的第一版HTTP協議中(以下統稱http1.0),可以看到的整個"外賣"系統已經成型。

已經具備"下單"以及"發貨"的能力,但是有所不足的是用戶并不能同一時間,點復數的餐。

http1.0是無法復用連接的。一次傳輸對應的是一次返回,并且直接關閉這個傳輸鏈。

你只能下一張單了,商家回應并且發一份貨物了。這次買賣就結束了!

你并不同時在一次購買中同時和商家說我這次要買三份外賣!

那么這樣方便嗎?我要買三份外賣還必須撥打三次電話下三次單才能完成呢

很遺憾的是http1.0中,只能夠這么處理事情。

于是乎這些問題就留到了第二版HTTP協議中解決,他也就這么誕生了(以下統稱http1.1


HTTP協議1.1版

在http1.1中加入了倆個新指令

1. Connection :keep-ALive :讓客戶端和服務器之間的聯系保持一段時間。(再也不需要重新撥打電話才能下第二張單了)

2. HttpPipelining:同時建立多個連接。(并且不用以一張一張訂單的形式告訴商家,直接說我要買三份青菜!)

可以看到的是http1.1中,1.0所遇到的問題已經基本上解決了。

這么仔細一想,問題都解決了。為什么還有2.0版本的出現呢

因為http1.1中只有單一線程處理工作,任務耗時較重的情況下,當前線程會堵塞其中。并且使得后續線程也只能跟著堵塞。

遇到服務器未響應的情況下,線程將會直接卡死在那造成 "線頭阻塞"

意思就是商家只有一個廚子,廚子炒菜炒不過來的情況下。后續訂單出貨量就慢了。但是!雖然炒菜慢但是還是能發貨

當廚子突然消失的情況下,訂單就出不了貨了。這個發貨流程就直接卡死了。

回過頭來,當問題出現的時候。首先就得尋求解決方法。

那么http協議的第三版就出現了。


?

HTTP協議2.0版

乍看之下,好像還真的有點不一樣啊。相比起第二版HTTP協議來說

感覺第三版HTTP(以下統稱http2.0)像似"暴富"一般,手頭闊了,人也多了。

是的沒錯,http2.0連接中線程可以并發的執行任務了。并不會像前者http1.1一樣遇到單一線程堵塞或未響應時的延緩或者卡死整條連接鏈路,先執行便回應。

結合http1.1舉得例子來說

廚子多了,并且不用對應用戶1的三份外賣,同時做好同時發。在同一個訂單里,先做好哪份就發哪份

如果遇到某客戶的訂單中的某一份外賣要求比較多(加蔥加辣加泡菜等等等)延緩出單的情況,也只是該訂單出單慢。影響不了其他倆單的出貨。

所以也就就把HTTP協議中大部位問題給解決了。

?

文章總結:

HTTP協議可以引用這么一句話 "一就是全,全就是一"。

當一卡住了,全也就卡住了。當全部東西解決完了,一條協議連接也就完成了。~


?

讀這篇文章的時候估計很多人也有很多疑惑吧

還有很多謎團沒揭曉呢,連接又是啥,網絡請求這么復雜的嗎?

是的,網絡這塊特別復雜,今天說的這三個版本連冰山一角上的冰塊都沒摸著。

接下來我還要繼續對連接這塊,以自己的理解解刨一下。

下期講的是TCP協議~~

end

轉載于:https://www.cnblogs.com/UUUUgua/p/9910503.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/450795.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/450795.shtml
英文地址,請注明出處:http://en.pswp.cn/news/450795.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【最新版】Java速成路線(急于找工作!)

文章目錄計算機網絡分層結構TCP/UDPHTTP/HTTPS狀態碼Cookie 和 SessionURI和URL操作系統線程和進程數據結構和算法數據結構算法設計模式(23種)單例工廠代理適配器觀察者模板實操工具Git/SVNMaven/GradleLinux基本操作NginxELKpostmanJAVA基礎語言基礎JVM…

Java Web Start實例

前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。 JWS讓用戶可以下載服務器端的Java Application到本機運行,并且沒有安裝、配置等繁瑣的操作JWS的運行原理:瀏覽器…

老派程序員——徒手實現偉大成就

摘要:本文介紹了三位非常著名的程序員:Ken Thompson,Joe Armstrong 和 Jamie Zawinski,他們是如何發明一門新語言,他們開發軟件時會像我們一樣使用當今流行的開發工具嗎?當讀Peter Seibel的精彩著作《編程人生:15位軟件…

互聯網大廠項目研發流程

文章目錄階段一:階段二:階段三:階段四:階段五:開發人員:測試人員:設計師:階段六:階段七:總結:本文章學習自:https://www.bilibili.com…

centos常見錯誤 Failed to set locale, defaulting to C

錯誤描述: 當在centos中使用yum命令時,輸出錯誤: [rootlocalhost yum.repos.d]# yum list |grep prceFailed to set locale, defaulting to C 用locale檢測,出現如下提示: rootlocalhost yum.repos.d]# localelocale: …

圖片上傳知識點梳理

在日常項目開發中,圖片上傳是一個十分常見的場景。而現在的各種UI框架都提供了自己的上傳組件,網上第三方的上傳組件也多如牛毛。可能你早已習慣了直接使用這些現成的組件,然而對于其具體的實現,卻并未深入解析。本文將通過簡單的…

解決 java.lang.IllegalArgumentException: Repository interface must not be null on initialization!

前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。 報錯:Caused by: java.lang.IllegalArgumentException: Repository interface must not be null on initialization! Cause…

【狂神說】JVM

文章目錄1.JVM的位置2.JVM的體系結構3.類加載器4.雙親委派機制(重要)5.沙箱安全機制(了解)6.native(核心)7.PC寄存器(了解)8.方法區9.棧10.三種JVM11.堆(Heap)12.新生區、老年區13.永…

我們真的需要統一的編程規范?

摘要:仁者見仁智者見智,編碼風格的不同,對項目也會有不同的影響,統一的編碼規范有益于項目的維護。俗話說,沒有規矩不成方圓,在2004年,UNIX創始人之一的Ken Arnold就發表了一篇很幽默文章&#…

百度云重磅發布ABC 3.0 尹世明如何詮釋百度云的“新”打法

雷鋒網9月4日消息,2018百度云智峰會正式召開,百度總裁張亞勤發表題為《新技術驅動,全面進入Cloud2.0》的演講并表示,經歷了PCClient/Server到MobileCloud 1.0,再到如今的AICloud 2.0過程,新技術推動云計算產…

EcmaScript對象克隆之謎

先談談深拷貝 如何在js中獲得一個克隆對象,可以說是喜聞樂見的話題了。相信大家都了解引用類型與基本類型,也都知道有種叫做深拷貝的東西,傳說深拷貝可以獲得一個克隆對象!那么像我這樣的萌新自然就去學習了一波,我們能…

開發人員眼中最好的代碼編輯器是誰?

摘要:對開發人員來講,開發工具就好比戰場上的“兵器”,不同領域的開發人員他們所使用的“兵器”也不完全相同,本文從友好性、功能性、擴展等多方面總結了最受開發人員歡迎的“兵器”。你最愛的那個在這里嗎? 如果我們把…

關于RESTful一些注意事項,接口開發規范

前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。 最近在研究restful,公司開發要使用,所以自己就去網上找了好些資料,并整理了一套公司開發的接口規范。…

【老杜】MySQL—day01

文章目錄day01課堂筆記1、數據庫概述及數據準備1.1、什么是數據庫1.2、什么是數據庫管理系統1.3、SQL概述1.4、安裝MySQL數據庫管理系統。1.4、MySQL數據庫的完美卸載!1.5、MySQL的服務1.6、用命令來啟動和關閉mysql服務1.7、登錄mysql數據庫2、MySQL常用命令&#…

【轉載】DRuid 大數據分析之查詢

轉載自http://yangyangmyself.iteye.com/blog/23217591、Druid 查詢概述上一節完成數據導入后,接下來講講Druid如何查詢及統計分析導入的數據。Druid的查詢是使用REST風格的HTTP請求查詢服務節點(Broker、Historical、Realtime),這…

記錄 Parameter with that position [1] did not exist; nested exception is java.lang.IllegalArgumentExce

前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。 報錯如題: Parameter with that position [1] did not exist; nested exception is java.lang.IllegalArgumentException: Pa…

[轉]簡單的動態修改RDLC報表頁邊距和列寬的方法

本文轉自:http://star704983.blog.163.com/blog/static/136661264201161604413204/ 1.修改頁邊距 XmlDocument XMLDoc new XmlDocument();XMLDoc.Load(System.Windows.Forms.Application.StartupPath "\Report_try-2.rdlc");XmlNamespaceManager xmn n…

函數式編程語言天生就慢嗎?

摘要:近期,函數式編程得到了越來越多的關注,Lisp不僅重獲青春還涌現出了一批新函數式編程語言。因此開發者們對函數式編程語言的運行快慢各抒己見,展開激烈討論。本文將和大家一起討論,函數式編程語言真的就慢嗎&#…

【老杜】MySQL—day02

文章目錄day02課堂筆記1、把查詢結果去除重復記錄【distinct】10、連接查詢10.1、什么是連接查詢?10.2、連接查詢的分類?10.3、當兩張表進行連接查詢時,沒有任何條件的限制會發生什么現象?10.4、怎么避免笛卡爾積現象?…