前端網絡

網絡

HTTPS原理

一句話歸納:css

HTTPS要使客戶端與服務器端的通訊過程獲得安全保證,必須使用的對稱加密算法,可是協商對稱加密算法的過程,須要使用非對稱加密算法來保證安全,然而直接使用非對稱加密的過程自己也不安全,會有中間人篡改公鑰的可能性,因此客戶端與服務器不直接使用公鑰,而是使用數字證書籤發機構頒發的證書來保證非對稱加密過程自己的安全。這樣經過這些機制協商出一個對稱加密算法,就此雙方使用該算法進行加密解密。從而解決了客戶端與服務器端之間的通訊安全問題html

HTTP狀態碼

HTTP狀態碼分類

1**:信息,服務器收到請求,須要請求者繼續執行操做算法

2**:成功,操做被成功接收並處理瀏覽器

3**:重定向,須要進一步的操做以完成請求緩存

4**:客戶端錯誤,請求包含語法錯誤或沒法完成請求(一般API名稱寫錯或者後臺代碼沒有部署致使找不到接口)安全

5**:服務器錯誤,服務器在處理請求的過程當中發生了錯誤性能優化

狀態碼 英文名稱 中文描述
100 Continue 繼續。客戶端贏繼續其請求
200 OK 請求成功。通常用於get與post請求
204 No Content 無內容。服務器成功處理,但未返回內容。在未更新網頁的狀況下,可確保瀏覽器繼續顯示當前文檔
300 Multiple Choices 多種選擇。請求的資源可報貨多個位置,相應可返回一個資源特徵與地址的列表用於用戶終端選擇
301 Moved Permanently 永久移動。請求的資源已被永久的移動到新URI,瀏覽器會自動定向到新URI。從此任何新的請求都應使用新的URI代替
304 Not Modified 未修改。所請求的資源未修改,服務器返回此狀態碼時,不會返回任何資源。客戶端一般會緩存訪問過的資源,經過提供一個頭信息指出客戶端但願只返回在指定日期以後修改的資源。
400 Bad Request 客戶端請求語法錯誤,服務器沒法理解
401 Unauthorized 請求要求你用戶的身份認證
403 Forbidden 服務器理解請求客戶端的請求,可是拒絕執行此請求
404 Not Found 服務器沒法根據客戶端的請求找到資源。
408 Request Time-out 服務器等待客戶端發送的請求你時間過長,超時。
500 Internal Server Error 服務器內部錯誤,沒法完成請求
502 Bad Gateway 做爲網關或者代理工做的服務器嘗試執行請求時,從遠程服務器接收到了一個無效的響應
503 Service Unavailable 因爲超載或系統維護,服務器暫時的沒法處理客戶端的請求。延時的長度可包含在服務器的Retry-After頭信息中
504 Gateway Time-out 充當網關或代理的服務器,未及時從遠端服務器獲取請求

一次完整的HTTP請求過程

  域名解析 --> 發起TCP的3次握手 --> 創建TCP鏈接後發起http請求 --> 服務器響應http請求,瀏覽器獲得html代碼 --> 瀏覽器解析html代碼,並請求html代碼中的資源(如js、css、圖片等) --> 瀏覽器對頁面進行渲染呈現給用戶   服務器

HTTPS頁面與HTTP頁面混用

https頁面不能夠嵌入http頁面會報出錯誤提示或者忽略http資源網絡

解決辦法:socket

1.當兩種https和http的資源都存在的時候,可使用相對連接來進行資源定義,即(//resource),這樣能夠無縫匹配兩種資源

2.可使用ifream結構,在https的層內嵌套一層http的資源,也但是實現訪問

HTTP1.0、HTTP1.一、HTTP2.0

HTTP基本優化

影響HTTP速度的主要有兩個因素:帶寬和延遲

  • 帶寬:若是說咱們還停留在撥號上網的階段,帶寬可能會成爲一個比較嚴重影響請求的問題,可是如今網絡基礎建設已經使得帶寬獲得極大的提高,咱們再也不會擔憂由帶寬而影響網速,那麼就只剩下延遲了。
  • 延遲:
  1. 瀏覽器阻塞:瀏覽器會因爲一些緣由阻塞請求。瀏覽器對於同一個域名,同時只能有4個連接,超過瀏覽器最大鏈接數限制,後續請求就會被阻塞
  2. DNS查詢:瀏覽器須要知道目標服務器IP才能撿來連接。將域名解析爲IP的這個系統就是DNS。一般能夠用DNS緩存來達到減小這個時間的目的
  3. 創建連接:HTTP是基於TCP協議的,瀏覽器最快也要第三次握手才能捎帶HTTP請求報文,達到真正的創建連接。可是這些連接沒法複用,致使每次請求都會經歷3次握手和慢啓動

HTTP1.0和HTTP1.1的區別

  1. 緩存處理:http1.0主要使用header裏的If-Modified-Since,Expires來作爲緩存判斷的標準,而http1.1引入了更多的緩存控制策略如Entity tag,If-Unmodified-Since, If-Match, If-None-Match等更多可供選擇的緩存頭來控制緩存策略
  2. 錯誤通知管理:http1.1中增長了24個錯誤狀態響應碼,如409 表示請求的資源與資源當前狀態發生衝突;410 表示服務器上的某個資源唄永久性刪除
  3. 帶寬優化及網絡鏈接的使用:http1.0中存在浪費帶寬的現象,如客戶端只想要某個對象的一部分,而服務器卻將整個對象傳過來了,而且不支持斷點續傳。http1.1在請求頭引入了range頭域,容許只請求資源的某個部分,即返回206,方便了開發者自由的選擇以便於充分利用帶寬和連接
  4. Host頭處理:http1.0中認爲每臺服務器都綁定惟一的IP地址,所以請求消息中的URL並無傳遞主機名。但隨着虛擬主機技術的發展,一臺物理服務器能夠存在多個虛擬主機,而且共享一個IP。http1.1的請求消息和響應消息都應支持Host頭域,且請求消息中若是沒有Host會報400錯誤
  5. 長鏈接:http1.1支持長鏈接,和請求的流水線處理,在一個tcp鏈接上能夠傳送多個HTTP請求你和響應,減小了創建和關閉鏈接的消耗和延遲。默認開啓connection:keep-alive

HTTP 和 HTTPS 的區別

  1. https須要CA申請證書
  2. HTTP協議運行在TCP上,全部傳輸都是明文的;HTTPS運行在ssl/tls之上,ssl/tls運行在tcp之上,全部傳輸都是通過加密的
  3. https和http徹底不一樣的連接方式,端口也不同http80,https443
  4. https有效防止運營商劫持

image

SPDY

  1. 下降延遲:針對http高延遲問題,spdy採用了多路複用。
  2. 請求優先級:多路複用帶來的問題,在鏈接共享的基礎上可能致使關鍵請求被阻塞。SPDY容許給每一個request設置優先級,重要的請求會優先獲得響應
  3. header壓縮:選擇合適的壓縮算法能夠減小包的大小和數量
  4. 基於https的加密協議傳輸:提升傳輸數據可靠性
  5. 服務端推送(server push)

image

HTTP2.0:SPDY升級版

http2.0是基於spdy設計的,但略有不一樣

  • 首先http2.0能夠接受明文http傳輸、但spdy強制使用https
  • http2.0頭部壓縮算法用的是HPACK,spdy用的是DEFLATE

HTTP2.0 和HTTP1.x 相比的新特性

  • 新的二進制格式:http1.x解析是基於文本。文本表現形式多種多樣,要作到健壯性考慮的場景太多,可是二進制只認0和1,更加健壯方便
  • 多路複用:即鏈接共享。一個request對應一個id,這樣一個連接上能夠有多個request,每一個連接的request能夠隨機混在一塊兒,接收方能夠根據request的id將request再歸屬到各自不一樣的服務端請求裏面
  • header壓縮:對前面提到過HTTP1.x的header帶有大量信息,並且每次都要重複發送,HTTP2.0使用encoder來減小須要傳輸的header大小,通信雙方各自cache一份header fields表,既避免了重複header的傳輸,又減少了須要傳輸的大小。
  • 服務端推送

HTTP2.0的多路複用和HTTP1.X中的長鏈接複用有什麼區別?

  • HTTP/1.* 一次請求-響應,創建一個鏈接,用完關閉;每個請求都要創建一個鏈接;
  • HTTP/1.1 Pipeling解決方式爲,若干個請求排隊串行化單線程處理,後面的請求等待前面請求的返回才能得到執行機會,一旦有某請求超時等,後續請求只能被阻塞,毫無辦法,也就是人們常說的線頭阻塞;
  • HTTP/2多個請求可同時在一個鏈接上並行執行。某個請求任務耗時嚴重,不會影響到其它鏈接的正常執行;

image

爲何服務端推送會很快?

由於省去了客戶端重複請求的步驟,因爲沒有發起請求,創建鏈接等操做,因此靜態資源經過服務器推送的方式能夠極大的提高速度

普通客戶端請求:

image

服務端推送:

image

爲何要頭部壓縮?

假定一個頁面有100個資源須要加載(這個數量對於今天的Web而言仍是挺保守的), 而每一次請求都有1kb的消息頭(這一樣也並很多見,由於Cookie和引用等東西的存在), 則至少須要多消耗100kb來獲取這些消息頭。HTTP2.0能夠維護一個字典,差量更新HTTP頭部,大大下降因頭部傳輸產生的流量。具體參考:HTTP/2 頭部壓縮技術介紹

HTTP2.0多路複用有多好?

HTTP 性能優化的關鍵並不在於高帶寬,而是低延遲。TCP 鏈接會隨着時間進行自我「調諧」,起初會限制鏈接的最大速度,若是數據成功傳輸,會隨着時間的推移提升傳輸的速度。這種調諧則被稱爲 TCP 慢啓動。因爲這種緣由,讓本來就具備突發性和短時性的 HTTP 鏈接變的十分低效。 HTTP/2 經過讓全部數據流共用同一個鏈接,能夠更有效地使用 TCP 鏈接,讓高帶寬也能真正的服務於 HTTP 的性能提高。

http主要因爲慢啓動影響效率,而多路複用能夠充分利用帶寬

https原理通俗瞭解

http狀態碼

看完讓你完全搞懂Websocket原理

三次握手和四次揮手

一次完整的HTTP請求過程

HTTP1.0、HTTP1.1 和 HTTP2.0 的區別

Service Worker, 你究竟是個什麼東西?

https 頁面中引入 http 資源的解決方式

一文讀懂HTTP/2 及 HTTP/3特性

相關文章
相關標籤/搜索