程式設計師掌握 HTTP 有多重要?
1:了解Http協議,可以了解Web應用程式前後端的交互
2:可以模仿Http的post和get的請求方式,寫一個類似HttpClient的工具,然後爬蟲。
3:可以自己寫一個瀏覽器,對於深入瀏覽器原理很有幫助。
4:可以替代Webservice和dubbo這類的遠程連接工具,直接通過http的post和get的方式,通過json來交換數據。
在本文中列出了十三道HTTP常見的「疑難雜症」,也是各個大廠面試官基本上都會問到的一些難點和考點,要是你能從容的答出來,那麼你的面試官一定會對你刮目相看
怎麼學HTTP?怎麼學好HTTP?文末我已給出了我的建議,希望能對廣大讀者能起到一定的幫助!
學習計算機網絡時我們一般採用折中的辦法,也就是中和 OSI 和 TCP/IP 的優點,採用一種只有五層協議的體系結構,這樣既簡潔又能將概念闡述清楚。
結合網際網路的情況,自上而下地,非常簡要的介紹一下各層的作用。
應用層(application-layer)的任務是通過應用進程間的交互來完成特定網絡應用。應用層協議定義的是應用進程(進程:主機中正在運行的程序)間的通信和交互的規則。對於不同的網絡應用需要不同的應用層協議。在網際網路中應用層協議很多,如域名系統DNS,支持全球資訊網應用的 HTTP協議,支持電子郵件的 SMTP協議等等。我們把應用層交互的數據單元稱為報文。
運輸層(transport layer)的主要任務就是負責向兩台主機進程之間的通信提供通用的數據傳輸服務。應用進程利用該服務傳送應用層報文。「通用的」是指並不針對某一個特定的網絡應用,而是多種應用可以使用同一個運輸層服務。由於一台主機可同時運行多個線程,因此運輸層有復用和分用的功能。所謂復用就是指多個應用層進程可同時使用下面運輸層的服務,分用和復用相反,是運輸層把收到的信息分別交付上面應用層中的相應進程。
TCP 與 UDP 的對比見問題三。
在計算機網絡中進行通信的兩個計算機之間可能會經過很多個數據鏈路,也可能還要經過很多通信子網。網絡層的任務就是選擇合適的網間路由和交換結點, 確保數據及時傳送。 在發送數據時,網絡層把運輸層產生的報文段或用戶數據報封裝成分組和包進行傳送。在 TCP/IP 體系結構中,由於網絡層使用 IP 協議,因此分組也叫 IP 數據報 ,簡稱 數據報。
數據鏈路層(data link layer)通常簡稱為鏈路層。兩台主機之間的數據傳輸,總是在一段一段的鏈路上傳送的,這就需要使用專門的鏈路層的協議。 在兩個相鄰節點之間傳送數據時,數據鏈路層將網絡層交下來的 IP 數據報組裝成幀,在兩個相鄰節點間的鏈路上傳送幀。每一幀包括數據和必要的控制信息(如同步信息,地址信息,差錯控制等)。
在物理層上所傳送的數據單位是比特。 物理層(physical layer)的作用是實現相鄰計算機節點之間比特流的透明傳送,儘可能屏蔽掉具體傳輸介質和物理設備的差異。 使其上面的數據鏈路層不必考慮網絡的具體傳輸介質是什麼。「透明傳送比特流」表示經實際電路傳送後的比特流沒有發生變化,對傳送的比特流來說,這個電路好像是看不見的。
上面我們對計算機網絡的五層體系結構有了初步的了解,下面附送一張七層體系結構圖總結一下。
為了準確無誤地把數據送達目標處,TCP協議採用了三次握手策略。
如下圖所示,下面的兩個機器人通過3次握手確定了對方能正確接收和發送消息(圖片來源:《圖解HTTP》)。
簡單示意圖:
三次握手的目的是建立可靠的通信信道,說到通訊,簡單來說就是數據的發送與接收,而三次握手最主要的目的就是雙方確認自己與對方的發送與接收是正常的。
第一次握手:Client 什麼都不能確認;Server 確認了對方發送正常,自己接收正常
第二次握手:Client 確認了:自己發送、接收正常,對方發送、接收正常;Server 確認了:對方發送正常,自己接收正常
第三次握手:Client 確認了:自己發送、接收正常,對方發送、接收正常;Server 確認了:自己發送、接收正常,對方發送、接收正常
所以三次握手就能確認雙發收發功能都正常,缺一不可。
接收端傳回發送端所發送的 SYN 是為了告訴發送端,我接收到的信息確實就是你所發送的信號了。
雙方通信無誤必須是兩者互相發送信息都無誤。傳了 SYN,證明發送方到接收方的通道沒有問題,但是接收方到發送方的通道還需要 ACK 信號來進行驗證。
斷開一個 TCP 連接則需要「四次揮手」:
任何一方都可以在數據傳送結束後發出連接釋放的通知,待對方確認後進入半關閉狀態。當另一方也沒有數據再發送的時候,則發出連接釋放通知,對方確認後就完全關閉了TCP連接。
UDP 在傳送數據之前不需要先建立連接,遠地主機在收到 UDP 報文後,不需要給出任何確認。雖然 UDP 不提供可靠交付,但在某些情況下 UDP 確是一種最有效的工作方式(一般用於即時通信),比如: QQ 語音、 QQ 視頻 、直播等等
百度好像最喜歡問這個問題。
打開一個網頁,整個過程會使用哪些協議
圖解(圖片來源:《圖解HTTP》):
總體來說分為以下幾個過程:
一般面試官會通過這樣的問題來考察你對計算機網絡知識體系的理解。
圖片來源:《圖解HTTP》
非常推薦大家看一下 《圖解HTTP》 這本書,這本書頁數不多,但是內容很是充實,不管是用來系統的掌握網絡方面的一些知識還是說純粹為了應付面試都有很大幫助。是一本不可多得的純乾貨好書!
找不到哪裡有這本書?不用擔心,小編肯定已經準備好了在這裡,需要這份《圖解HTTP》電子檔的朋友可以後台私信我「資料」即可免費獲取~