HTTP協議
HTTP是一種超文本傳輸協議,HTTP 是一個在計算機世界里專門在兩點之間傳輸文字、圖片、音頻、視頻等超文本數據的約定和規范。
HTTP主要內容分為三部分,超文本,傳輸,協議。
· 超文本就是不單單只是本文,它還可以傳輸圖片、音頻、視頻,甚至點擊文字或圖片能夠進行超鏈接的跳轉。
· 上面這些概念可以統稱為數據,傳輸就是數據需要經過一系列的物理介質從一個端系統傳送到另外一個端系統的過程。通常我們把傳輸數據包的一方稱為請求方,把接到二進制數據包的一方稱為應答方。
· 而協議指的就是是網絡中(包括互聯網)傳遞、管理信息的一些規范。如同人與人之間相互交流是需要遵循一定的規矩一樣,計算機之間的相互通信需要共同遵守一定的規則,這些規則就稱為協議,只不過是網絡協議。
什么是無狀態協議,HTTP 是無狀態協議嗎,怎么解決?
無狀態協議就是指瀏覽器對於事物的處理沒有記憶能力。舉個例子來說就是比如客戶請求獲得網頁之后關閉瀏覽器,然后再次啟動瀏覽器,登錄該網站,但是服務器並不知道客戶關閉了一次瀏覽器。
HTTP 就是一種無狀態的協議,他對用戶的操作沒有記憶能力。可能大多數用戶不相信,他可能覺得每次輸入用戶名和密碼登陸一個網站后,下次登陸就不再重新輸入用戶名和密碼了。這其實不是 HTTP 做的事情,起作用的是一個叫做 小甜餅(Cookie) 的機制。它能夠讓瀏覽器具有記憶能力。
HTTP的主要特點和工作流程。
HTTP特點:
1.支持客戶/服務器模式。(C/S模式)
2.簡單快速:客戶向服務器請求服務時,只需傳送請求方法和路徑。請求方法常用的有GET、HEAD、POST。每種方法規定了客戶與服務器聯系的類型不同。由於HTTP協議簡單,使得HTTP服務器的程序規模小,因而通信速度很快。
3.靈活:HTTP允許傳輸任意類型的數據對象。正在傳輸的類型由Content-Type加以標記。
4.無連接:無連接的含義是限制每次連接只處理一個請求。服務器處理完客戶的請求,並收到客戶的應答后,即斷開連接。采用這種方式可以節省傳輸時間。
5.無狀態:HTTP協議是無狀態協議。無狀態是指協議對於事務處理沒有記憶能力。缺少狀態意味着如果后續處理需要前面的信息,則它必須重傳,這樣可能導致每次連接傳送的數據量增大。另一方面,在服務器不需要先前信息時它的應答就較快。
HTTP工作流程:
第一步:建立TCP/IP連接,客戶端與服務器通過Socket三次握手進行連接。
第二步:客戶端向服務端發起HTTP請求(例如:POST/login.html http/1.1)。
第三步:客戶端發送請求頭信息,請求內容,最后會發送一空白行,標示客戶端請求完畢。
第四步:服務器做出應答,表示對於客戶端請求的應答,例如:HTTP/1.1 200 OK。
第五步:服務器向客戶端發送應答頭信息。
第六步:服務器向客戶端發送請求頭信息后,也會發送一空白行,標示應答頭信息發送完畢,接着就以Content-type要求的數據格式發送數據給客戶端。
第七步:服務端關閉TCP連接,如果服務器或者客戶端增Connection:keep-alive就表示客戶端與服務器端繼續保存連接,在下次請求時可以繼續使用這次的連接。
HTTPS特點:
HTTPS是HTTP協議的修改,他加密數據並確保其機密性。其配置可保護用戶在於網站交互時免於竊取個人信息和計費數據。
1、優點
相比於http,https可以提供更加優質保密的信息,保證了用戶數據的安全性,此外https同時也一定程度上保護了服務端,使用惡意攻擊和偽裝數據的成本大大提高。
2、缺點
缺點也同樣很明顯,第一https的技術門檻較高,多數個人或者私人網站難以支撐,CA機構頒發的證書都是需要年費的,此外對接Https協議也需要額外的技術支持;其二,目前來說大多數網站並不關心數據的安全性和保密性,其https最大的優點對它來說並不適用;其三,https加重了服務端的負擔,相比於http其需要更多的資源來支撐,同時也降低了用戶的訪問速度;第四,目前來說Http網站仍然大規模使用,在瀏覽器側也沒有特別大的差別,很多用戶不關心的話根本不感知。
HTTPS工作流程:
第一步:客戶使用https的URL訪問Web服務器,要求與Web服務器建立SSL連接。
第二步:Web服務器收到客戶端請求后,會將網站的證書信息(證書中包含公鑰)傳送一份給客戶端。
第三步:客戶端的瀏覽器與Web服務器開始協商SSL連接的安全等級,也就是信息加密的等級。
第四步:客戶端的瀏覽器根據雙方同意的安全等級,建立會話密鑰,然后利用網站的公鑰將會話密鑰加密,並傳送給網站。
第五步:Web服務器利用自己的私鑰解密出會話密鑰。
第六步:Web服務器利用會話密鑰加密與客戶端之間的通信。
TCP協議和UDP協議
區別
面向連接VS無連接
TCP建立一個連接需要3次握手IP數據包,斷開連接需要4次握手。另外斷開連接時發起方可能進入TIME_WAIT狀態長達數分鍾(視系統設置,windows一般為120秒),在此狀態下連接(端口)無法被釋放。
UDP不需要建立連接,可以直接發起。
可靠VS不可靠
TCP利用握手、ACK和重傳機制,udp沒有。
TCP利用seq序列號對包進行排序,udp沒有。
面向字節流vs面向報文
面向報文
面向報文的傳輸方式是應用層交給UDP多長的報文,UDP就照樣發送,即一次發送一個報文。因此,應用程序必須選擇合適大小的報文。若報文太長,則IP層需要分片。UDP對應用層交下來的報文,既不合並,也不拆分,而是保留這些報文的邊界。這也就是說,應用層交給UDP多長的報文,UDP就照樣發送,即一次發送一個報文。(一個upd的最大報文長度2^16-1-20-8,20是ip報文頭,8是udp報文頭)
面向字節流
面向字節流的話,雖然應用程序和TCP的交互是一次一個數據塊(大小不等),但TCP把應用程序看成是一連串的無結構的字節流。TCP有一個緩沖,當應用程序傳送的數據塊太長,TCP就可以把它划分短一些再傳送。如果應用程序一次只發送一個字節,TCP也可以等待積累有足夠多的字節后再構成報文段發送出去。
tcp有流量控制,udp沒有
tcp的頭部比20bytes,udp8byres
TCP應用場景:
效率要求相對低,但對准確性要求相對高的場景。因為傳輸中需要對數據確認、重發、排序等操作,相比之下效率沒有UDP高。舉幾個例子:文件傳輸(准確高要求高、但是速度可以相對慢)、接受郵件、遠程登錄。
UDP應用場景:
效率要求相對高,對准確性要求相對低的場景。舉幾個例子:QQ聊天、在線視頻、網絡語音電話(即時通訊,速度要求高,但是出現偶爾斷續不是太大問題,並且此處完全不可以使用重發機制)、廣播通信(廣播、多播)。