HTTP和HTTPS
HTTP
1.網站通訊粗略過程
我們知道HTTP是在應用層中的,顯然,我們在Web通訊的過程中,不僅僅是需要HTTP協議的,還會涉及到其他的協議的。
DNS:負責解析域名
-
我們訪問一個網頁的時候,往往是通過域名來訪問的
www.zhongfucheng.site
,而計算機通訊只認的是我們的主機地址(192.168.xxx.xxx),因此,當我們輸入域名的時候,需要DNS把域名解析成主機來進行訪問。
HTTP:產生請求報文資料
-
當我們對Web頁面進行操作的時候,就會產生HTTP報文資料,請求對應的服務端進行響應。
DNS和HTTP都屬於應用層
TCP協議:分割HTTP資料,保證資料運輸
-
TCP協議採用了三次握手的方式來保證資料的準確運輸,在運輸的資料的時候,傳送標識過去給伺服器,伺服器也返回標識給客戶端,而客戶端收到訊息後再次返回標識給伺服器。這樣一來就保證了資料運輸是可靠的。
TCP屬於運輸層
IP協議:傳輸資料包,找到通訊目的地地址。
-
IP協議把我們的產生的資料包傳送給對方,IP地址指明瞭節點被分配的地址,但IP地址可能會變換,我們可以使用ARP協議來將IP地址反射為MAC地址。MAC地址是不會更改的,是網絡卡所屬的固定地址。
-
在找到通訊目的地之前,我們是需要不斷的中轉的,這過程我們稱作為:“路由中轉”,我們並不知道路由中轉了多少次的。因此是不能全面瞭解到網際網路中的傳輸狀況的。
IP屬於網際層
PORT:確認兩個電腦互相通訊的程序
-
兩個電腦的網路通訊實際上是兩個電腦的程序之間的通訊,埠用來標識一個程序
PORT屬於網路介面層
2.HTTP是不儲存狀態的協議
HTTP是無狀態的,也就是說,它是不對通訊狀態進行儲存的。它並不知道之前通訊的對方是誰。這樣設計的目的就是為了讓HTTP簡單化,能夠快速處理大量的事務!
但是,我們經常是需要知道訪問的人是誰,於是就有了Cookie技術了。
-
要是伺服器端想要記住客戶端是誰,那麼就頒發一個cookie給客戶端
-
客戶端把Cookie儲存在硬碟中,當下次訪問伺服器的時候,瀏覽器會自動把客戶端的cookie帶過去。
-
就這樣,伺服器就能夠知道這傢伙是誰了
3.持久連線
在HTTP1.0的時候,每一次進行HTTP通訊就會斷開一次連線。如果容量很少的文字傳輸是沒有問題的。但是如果我們訪問一個網頁,該網頁有非常多的圖片。一個圖片就算上一個HTTP請求了。那麼在中途中就不斷地建立TCP連線、獲取圖片、斷開TCP連線。
這樣是非常浪費資源的,因此在HTTP1.1版本,就是持久連線了。一次HTTP連線能夠處理多個請求。
持久連線為“管線化”方式傳送成為了可能:在一次HTTP連線裡面,不需要等待伺服器響應請求,就能夠繼續傳送第二次請求。
4.提升傳輸效率
在說明之前,首先我們要知道什麼是實體主體
-
實體主體就是作為資料在HTTP中傳輸的資料。
一般地,實體主體可以等價為報文主體,報文主體是HTTP中的一部分。
我們如果不使用任何手段,伺服器返回的資料實體主體是原樣返回的。我們可以使用兩種方式來提高傳輸效率
-
使用壓縮技術把實體主體壓小,在客戶端再把資料解析
-
使用分塊傳輸編碼,將實體主體分塊傳輸,當瀏覽器解析到實體主體就能夠顯示了。
我們如果在下載東西的過程中斷了,按照以前我們是需要重新下載的,但是現在可以在中斷中繼續下載。我們可以使用到獲取範圍資料,這種叫做範圍請求!
這種請求只會下載資源的一部分。
-
比如我的圖片下載到一半了,我們只需要下載另一半就可以組成一張完整的圖片了。那麼請求的時候請求沒有下載的一部分即可。
HTTPS
我們最好就是使用SSL建立安全的通訊線路,就可以在這條線路上進行HTTP通訊了。
其實HTTPS就是披著SSL的HTTP
流程如下:
1、因為CA是工信機構,會內建到瀏覽器或作業系統中,所以客戶端會持有CA機構的公鑰
2、伺服器去認證的CA機構申請一份數字證書。數字證書會經過CA機構的私鑰加密,裡面包含有證書持有者、證書有效期、伺服器公鑰等資訊
4、如果證書是可信的,客戶端解密出伺服器的公鑰。客戶端生成一個對稱加密的隨機Key,並用證書內的伺服器公鑰進行加密,傳送給服務端
5、服務端收到訊息,用自己的私鑰解密,拿到客戶端隨機生成的Key,加密資料後返回給客戶端;客戶端收到訊息,就可以用之前生成的Key來解密服務端返回的資料。後續就可以通過對稱加密的key傳送/接收訊息了
HTTP常見面試題
1.HTTP與HTTPS的區別
-
HTTP 的URL 以http:// 開頭,而HTTPS 的URL 以https:// 開頭
-
HTTP 是不安全的,而 HTTPS 是安全的
-
HTTP 標準埠是80 ,而 HTTPS 的標準埠是443
-
在OSI 網路模型中,HTTP工作於應用層,而HTTPS 的安全傳輸機制工作在傳輸層
-
HTTP 無法加密,而HTTPS 對傳輸的資料進行加密
-
HTTP無需證書,而HTTPS 需要CA機構wosign的頒發的SSL證書