點到即止,對HTTP協議的理解
HTTP協議是什麼?
http協議是超文字傳輸協議,用於在客戶端與伺服器間進行資料傳輸。
HTTP協議位於計算機網路的哪一層?
http協議是位於最頂層的應用層協議,在傳輸層的TCP/UDP,網路層的IP協議之上。其中在應用層和傳輸層之間有一層獨立的安全套接層SSL。
HTTP1.0,HTTP1.1的區別?
HTTP的特點在於無狀態,無連線。為了保持長連線,http1.0需要設定connection:keep-alive ,而在http1.1時預設為長連線。
http1.0儲存狀態使用pragma,expire,last-modified/if-modified-since
http1.1新增了cookie,cache-control,etag/if-none-match(這幾個屬性在下面詳細介紹)
http1.1新增狀態碼100,用於請求時是否傳送資料的預先判斷。即先建立連線傳送requestHeader,若伺服器返回100,則繼續傳送requestBody。
http1.1新增了host屬性,使不同的虛擬站點共用同一個ip
http1.1新增了option請求,用於判斷是否允許get、post請求。如傳送一個get前會先發送一個option請求,以確認是否允許傳送get請求
HTTP2.0的理解?
1、二進位制分幀:http2.0的基礎,將資料以訊息的形式傳送,將訊息分解成更小的單位——幀
2、頭部壓縮:對多次http請求進行頭部比較,相同的引數則不會重複傳送。
3、多路複用:過去多個http請求需要建立多個tcp連線,因此同時傳送多個http請求會有限制,且效能不高;在http2.0,由於資料以幀的形式傳輸,請求會被拆分開來傳輸,並在最後被重新打包,以達到同時進行多個請求的結果。
4、服務端推送:伺服器通過一個獨立的url向客戶端推送可能用到的資料,並加以快取。
5、請求優先順序:可以設定每個請求的優先順序,如css優先於img
HTTPS的理解?
https使用對稱金鑰對資料進行加密,加強了http請求過程中的安全性,通過以下過程實現:
1、客戶端傳送請求
2、服務端響應並生成公鑰和私鑰,返回證書(包含公鑰)
3、客戶端檢查證書安全性,若安全,則使用公鑰對客戶端產生的對稱祕鑰進行加密,將加密後的對稱金鑰傳送給服務端
4、服務端使用私鑰進行解密,並用解密得到的對稱金鑰對要返回的資料進行加密,將加密後的資料返回給客戶端
5、客戶端使用對稱金鑰對資料進行解密
cookie是什麼?sessionStorage和localStorage是什麼?
cookie用於儲存使用者憑證資訊,如登入資訊。但由於是瀏覽器可見的,一般不存放使用者名稱密碼。
cookie會在http請求中傳送,與後端的session進行互動
設定cookie的方式:
document.cookie = 'name=' + '123456;' + 'expires=' + 時間戳 + ';' + 'domain=' + 域名 + ';'
sessionStorage和localStorage是瀏覽器快取,將資料快取在瀏覽器中,不會發送到伺服器,也無法設定過期時間
sessionStorage隨瀏覽器關閉而清除;localStorage儲存在本地,需要手動清除
強快取和協商快取?
客戶端傳送http請求到伺服器會經過以下過程:
1、判斷header中的expires和catch-control是否命中強快取(即是否過期),若命中,則載入強快取,不與服務端建立連線;若位命中,則向服務端傳送請求
2、服務端先後檢驗header中的if-modified-since和if-none-match與服務端儲存的last-modified和etag是否一致,若一致,則命中協商快取,返回狀態碼304,告知客戶端去讀取協商快取;若不一致,則返回狀態碼200和新資料
HTTP請求和響應的結構?
http請求:
1、請求行:方法名(post)/url/協議及版本(http1.1)
2、請求頭:Accept: 接收的資料型別;Referer: 目標來源;content-type: 傳送的資料型別;catch-control:快取時間;cookie;if-none-match;if-modified-since;connection:keep-alive;host(必須!): 主機名和埠號;
3、空行(\r\n)
4、請求體:鍵值對的形式
http響應:
1、響應行:協議及版本/狀態碼(200)
2、響應頭:content-type: 返回資料的型別;catch-control: 快取時間;Etag(對應if-none-match);last-modified(對應if-modified-since)
3、空行(\r\n)
4、響應體:即返回的資料