這多是我見過把HTTP解釋的最通俗易懂的文章!

本文經過比喻的方式介紹了什麼是HTTP,並闡述了從HTTP/1.0 到HTTP/3各個版本的區別和特色,值得一看。如下是原文:git

週末一大早,我正在電腦前面瀏覽一些技術網站,忽然女友大喊起來:哇,杭州又下大雪啦,快來看啊。我並無理她,因而她跑過來拉我。程序員

這多是我見過把HTTP解釋的最通俗易懂的文章!


這多是我見過把HTTP解釋的最通俗易懂的文章!


這多是我見過把HTTP解釋的最通俗易懂的文章!


這多是我見過把HTTP解釋的最通俗易懂的文章!


這多是我見過把HTTP解釋的最通俗易懂的文章!


 圖,雪後杭州github

這多是我見過把HTTP解釋的最通俗易懂的文章!


這多是我見過把HTTP解釋的最通俗易懂的文章!


由此次下雪將要介紹的HTTP和RPC也有點關係,都是通訊方式。瀏覽器

什麼是HTTP協議緩存

HTTP是HyperText Transfer Protocol的縮寫,中文翻譯爲超文本傳輸協議。他是一種用於分佈式、協做式和超媒體信息系統的應用層協議。HTTP是萬維網的數據通訊的基礎。安全

說的簡單點,其實HTTP協議主要就是用來進行客戶端和服務器之間進行通訊的標準協議。HTTP主要規定了客戶端如何與服務器創建連接、客戶端如何從服務器請求數據、服務器如何響應請求,以及最後鏈接如何關閉。服務器

當咱們在瀏覽器中輸入一個url,如http://www.taobao.com ,而後按下回車,一直到頁面顯示淘寶網的首頁的過程就是一次HTTP的網絡通訊。微信

此次通訊過程當中,咱們查看淘寶使用的電腦就是客戶端,而搭建淘寶網的那些計算機機器就是服務器網絡

這多是我見過把HTTP解釋的最通俗易懂的文章!


這個過程有點像老闆經過電話給員工下達命令。當咱們在瀏覽器輸入網址並按下回車以後,共發生瞭如下四件事:負載均衡

一、創建鏈接:老闆撥通手下員工的電話

二、進行請求:老闆提出本身的要求

三、響應:員工應答老闆的請求

四、關閉鏈接:掛斷電話

創建鏈接

老闆找出本身公司的總機電話號並撥通,員工接聽電話的過程就是創建鏈接

根據用戶輸入的URL地址,經過DNS、負載均衡等技術找到一臺服務器,客戶端與服務器的80端口創建一個TCP連接

進行請求

電話被接通以後,老闆可能要求某個具體員工來進行接聽,而且會對該員工下達一些命令,好比幫他取個快遞,幫他預訂個酒店,幫他收購一家公司等。這個過程就進行請求(request)

客戶端向服務器發送消息,請求URL中指定的頁面,要求執行指定的操做。

老闆對員工下達的命令中,能夠分爲不少種,好比有些命令只是簡單的事情詢問、而有些命令則要求員工執行某些決定,如收購公司等。

一樣的,HTTP的請求方法也有不少種,主要的有GETPOSTHEAD等。

響應

員工在接收到老闆下單的命令後,須要對該命令作出迴應。好比直接告知老闆他接下來的行程,幫老闆預訂好酒店後告訴他已經預訂成功等。這個過程就是響應(response)

服務器向客戶端發送響應。響應以狀態碼開頭。常見的狀態碼有:200、30二、40四、500等。

HTTP狀態碼由三個十進制數字組成,第一個十進制數字定義了狀態碼的類型,後兩個數字沒有分類的做用。HTTP狀態碼共分爲5種類型:

分類分類描述1**信息,服務器收到請求,須要請求者繼續執行操做2**成功,操做被成功接收並處理3**重定向,須要進一步的操做以完成請求4**客戶端錯誤,請求包含語法錯誤或沒法完成請求5**服務器錯誤,服務器在處理請求的過程當中發生了錯誤

關閉鏈接

老闆在下達完命令,而且員工給予響應以後,雙方會掛斷電話。這個過程就是關閉鏈接

客戶端或服務端均可以關閉鏈接。每一個請求都是用一個單獨的網絡鏈接。

特別的是:服務器不回記憶前面一次鏈接或者其結果,這種不記憶過去請求的協議被稱爲無狀態(stateless)協議。

這多是我見過把HTTP解釋的最通俗易懂的文章!


上圖就是一次淘寶網的HTTP請求的過程。其中顯示了request(請求)和response(響應)的全部信息。

這多是我見過把HTTP解釋的最通俗易懂的文章!


這多是我見過把HTTP解釋的最通俗易懂的文章!


這多是我見過把HTTP解釋的最通俗易懂的文章!


這多是我見過把HTTP解釋的最通俗易懂的文章!


HTTP協議的迭代

前面咱們把HTTP通訊比喻成打電話,嚴格一點來講,HTTP/2更像是如今的打電話。HTTP協議主要的版本有3個,分別是HTTP/1.0、HTTP/1.1和HTTP/2。

HTTP/1.0

1996年5月,HTTP/1.0 版本發佈,爲了提升系統的效率,HTTP/1.0規定瀏覽器與服務器只保持短暫的鏈接,瀏覽器的每次請求都須要與服務器創建一個TCP鏈接,服務器完成請求處理後當即斷開TCP鏈接,服務器不跟蹤每一個客戶也不記錄過去的請求。

這種方式就好像咱們打電話的時候,只能說一件事兒同樣,說完以後就要掛斷,想要說另一件事兒的時候就要從新撥打電話。

HTTP/1.0中瀏覽器與服務器只保持短暫的鏈接,鏈接沒法複用。也就是說每一個TCP鏈接只能發送一個請求。發送數據完畢,鏈接就關閉,若是還要請求其餘資源,就必須再新建一個鏈接。

咱們知道TCP鏈接的創建須要三次握手,是很耗費時間的一個過程。因此,HTTP/1.0版本的性能比較差。

HTTP/1.1

爲了解決HTTP/1.0存在的缺陷,HTTP/1.1於1999年誕生。相比較於HTTP/1.0來講,最主要的改進就是引入了持久鏈接。所謂的持久鏈接即TCP鏈接默認不關閉,能夠被多個請求複用

因爲以前打一次電話只能說一件事兒,效率很低。後來人們提出一種想法,就是電話打完以後,先不直接掛斷,而是持續一小段時間,這一小段時間內,若是還有事情溝通能夠再次進行溝通。

客戶端和服務器發現對方一段時間沒有活動,就能夠主動關閉鏈接。或者客戶端在最後一個請求時,主動告訴服務端要關閉鏈接。

HTTP/1.1版還引入了管道機制(pipelining),即在同一個TCP鏈接裏面,客戶端能夠同時發送多個請求。這樣就進一步改進了HTTP協議的效率。

這多是我見過把HTTP解釋的最通俗易懂的文章!


也就是說,如今打電話,一個電話裏面能夠吩咐多件事兒了。可是對於執行者來講,仍是須要按照順序,先執行完一件事兒之後再執行另一件事兒。

有了持久鏈接和管道,大大的提高了HTTP的效率。可是服務端仍是順序執行的,效率還有提高的空間。

HTTP/2

HTTP/2 是 HTTP 協議自 1999 年 HTTP 1.1 發佈後的首個更新,主要基於 SPDY 協議。

HTTP/2 爲了解決HTTP/1.1中仍然存在的效率問題,HTTP/2 採用了多路複用。即在一個鏈接裏,客戶端和瀏覽器均可以同時發送多個請求或迴應,並且不用按照順序一一對應。能這樣作有一個前提,就是HTTP/2進行了二進制分幀,即 HTTP/2 會將全部傳輸的信息分割爲更小的消息和幀(frame),並對它們採用二進制格式的編碼。

也就是說,老闆能夠同時下達多個命令,員工也能夠收到了A請求和B請求,因而先回應A請求,結果發現處理過程很是耗時,因而就發送A請求已經處理好的部分, 接着迴應B請求,完成後,再發送A請求剩下的部分。A請求的兩部分響應在組合到一塊兒發給老闆。

這多是我見過把HTTP解釋的最通俗易懂的文章!


而這個負責拆分、組裝請求和二進制幀的一層就叫作二進制分幀層

除此以外,還有一些其餘的優化,好比作Header壓縮、服務端推送等。

Header壓縮就是壓縮老闆和員工之間的對話。

服務端推送就是員工事先把一些老闆可能詢問的事情提現發送到老闆的手機(緩存)上。這樣老闆想要知道的時候就能夠直接讀取短信(緩存)了。

目前,主流的HTTP協議仍是HTTP/1.1 和 HTTP/2。而且各大網站的HTTP/2的使用率也在逐年增長。

這多是我見過把HTTP解釋的最通俗易懂的文章!


這多是我見過把HTTP解釋的最通俗易懂的文章!


這多是我見過把HTTP解釋的最通俗易懂的文章!


這多是我見過把HTTP解釋的最通俗易懂的文章!


HTTP-over-QUIC

據國際互聯網工程任務組(The Internet Engineering Task Force,簡稱 IETF )消息,HTTP-over-QUIC 實驗性協議將被重命名爲 HTTP/3,並有望成爲 HTTP 協議的第三個正式版本。

QUIC (Quick UDP Internet Connections)是 Google 推出的一個項目,旨在下降基於 TCP 通信的 Web 延遲。QUIC 很是相似 TCP+TLS+SPDY ,可是基於 UDP 實現的

這種通訊方式有點像如今咱們使用的微信語言,在通話以前,老闆和下屬之間並無直接的創建可靠鏈接,即不須要撥通電話,而是拿起微信,直接經過語音直接下達了命令。

這多是我見過把HTTP解釋的最通俗易懂的文章!


HTTP/3使用UDP代替了TCP,UDP是一個非鏈接的協議,傳輸數據以前源端和終端不創建鏈接。 UDP信息包的標題很,對系統資源的要求比TCP要低。而且UDP是使用最大努力交付,即不保證可靠交付

咱們常用的「ping」命令的原理就是向對方主機發送UDP數據包,而後對方主機確認收到數據包, 若是數據包是否到達的消息及時反饋回來,那麼網絡就是通的。

至於,這種基於QUIC的HTTP協議究竟將來發展如何,目前只能拭目以待了。

下面是一張大圖,經過圖解來介紹HTTP/1.0、HTTP/1.一、HTTP/2.0(SDPY)和HTTP over QUIC(HTTP/3)

這多是我見過把HTTP解釋的最通俗易懂的文章!


這多是我見過把HTTP解釋的最通俗易懂的文章!


這多是我見過把HTTP解釋的最通俗易懂的文章!


這多是我見過把HTTP解釋的最通俗易懂的文章!


這多是我見過把HTTP解釋的最通俗易懂的文章!


HTTPS

HTTPS是Hypertext Transfer Protocol Secure的縮寫,翻譯爲超文本傳輸安全協議。HTTPS經由HTTP進行通訊,但利用SSL/TLS來加密數據包。

HTTPS就像是加密電話,經過一些手段來加密通話內容的。他是基於普通電話的,可是又不是普通的電話,更不是普通電話的升級版。

因此,HTTP和HTTPS是兩個不一樣的協議

HTTP的URL是由「http://」起始與默認使用端口80,而HTTPS的URL則是由「https://」起始與默認使用端口443。

HTTP不是安全的,並且***者能夠經過監聽和中間人***等手段,獲取網站賬戶和敏感信息等。HTTPS的設計能夠防止前述***,在正確配置時是安全的。

這多是我見過把HTTP解釋的最通俗易懂的文章!


這多是我見過把HTTP解釋的最通俗易懂的文章!


美國民主與技術中心 CDT 首席技術專家 Joseph Hall 表示: "使用 HTTPS,你的互聯網服務供應商不會知道你在網站上幹了些什麼,即便是政府和間諜也不能辦到。"

這多是我見過把HTTP解釋的最通俗易懂的文章!


因此,目前已經有不少網站都在使用HTTPS協議了,包括全球最大的程序員交友網站:github!我說的是github,不是pornhub哦,雖然他也是https的。

這多是我見過把HTTP解釋的最通俗易懂的文章!


文章來源於網絡;

PS:本文的特殊形式只是爲了更加通俗易懂的講解知識。

相關文章
相關標籤/搜索