1. 程式人生 > 實用技巧 >HTTP和HTTPS

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

HTTPS是基於TLS上實現的,在網路上,只要是客戶端和服務端在互動,那就有可能被挾持。而客戶端是需要確切地知道服務端是不是真實的,所以我們需要CA(公信機構)來幫客戶端認定服務端是真實的

流程如下:

1、因為CA是工信機構,會內建到瀏覽器或作業系統中,所以客戶端會持有CA機構的公鑰

2、伺服器去認證的CA機構申請一份數字證書。數字證書會經過CA機構的私鑰加密,裡面包含有證書持有者、證書有效期、伺服器公鑰等資訊

3、客戶端請求伺服器,伺服器返回一個證書給客戶端,客戶端用CA的公鑰對證書解密,客戶端會判斷這個證書是否可信/有無被篡改(私鑰加密,公鑰解密我們一般用來做數字簽名(看有無被篡改))

4、如果證書是可信的,客戶端解密出伺服器的公鑰。客戶端生成一個對稱加密的隨機Key,並用證書內的伺服器公鑰進行加密,傳送給服務端

5、服務端收到訊息,用自己的私鑰解密,拿到客戶端隨機生成的Key,加密資料後返回給客戶端;客戶端收到訊息,就可以用之前生成的Key來解密服務端返回的資料。後續就可以通過對稱加密的key傳送/接收訊息了

HTTP常見面試題

1.HTTP與HTTPS的區別

  1. HTTP 的URL 以http:// 開頭,而HTTPS 的URL 以https:// 開頭

  2. HTTP 是不安全的,而 HTTPS 是安全的

  3. HTTP 標準埠是80 ,而 HTTPS 的標準埠是443

  4. 在OSI 網路模型中,HTTP工作於應用層,而HTTPS 的安全傳輸機制工作在傳輸層

  5. HTTP 無法加密,而HTTPS 對傳輸的資料進行加密

  6. HTTP無需證書,而HTTPS 需要CA機構wosign的頒發的SSL證書