前端面試之網絡

HTTP2

二進制分幀

HTTP/2 採用二進制格式傳輸數據,而非 HTTP 1.x 的文本格式,二進制協議解析起來更高效。 HTTP / 1 的請求和響應報文,都是由起始行,首部和實體正文(可選)組成,各部分之間以文本換行符分隔。HTTP/2 將請求和響應數據分割爲更小的幀,而且它們採用二進制編碼。前端

HTTP/2 中,同域名下全部通訊都在單個鏈接上完成,該鏈接能夠承載任意數量的雙向數據流。每一個數據流都以消息的形式發送,而消息又由一個或多個幀組成。多個幀之間能夠亂序發送,根據幀首部的流標識能夠從新組裝。瀏覽器

多路複用

多路複用,代替原來的序列和阻塞機制。全部請求都是經過一個TCP鏈接併發完成。 HTTP1.x 中,若是想併發多個請求,必須使用多個TCP連接,且瀏覽器爲了控制資源,還會對單個域名有 6-8個的TCP連接請求限制緩存

這一特性,使性能有了極大提高:安全

  1. 同個域名只須要佔用一個 TCP 鏈接,消除了因多個 TCP 鏈接而帶來的延時和內存消耗。
  2. 單個鏈接上能夠並行交錯的請求和響應,之間互不干擾。
  3. 在HTTP/2中,每一個請求均可以帶一個31bit的優先值,0表示最高優先級, 數值越大優先級越低。有了這個優先值,客戶端和服務器就能夠在處理不一樣的流時採起不一樣的策略,以最優的方式發送流、消息和幀。

服務器推送

服務端能夠主動推送,客戶端也有權利選擇是否接收服務器

頭部壓縮

  1. HTTP/2在客戶端和服務器端使用「首部表」來跟蹤和存儲以前發送的鍵-值對,對於相同的數據,再也不經過每次請求和響應發送;
  2. 首部表在HTTP/2的鏈接存續期內始終存在,由客戶端和服務器共同漸進地更新;
  3. 每一個新的首部鍵-值對要麼被追加到當前表的末尾,要麼替換表中以前的值。

簡述TCP鏈接的過程

第一次握手:創建鏈接時,客戶端發送syn包(syn=j)到服務器,並進入SYN_SEND狀態,等待服務器確認;
SYN:同步序列編號(Synchronize Sequence Numbers)網絡

第二次握手:服務器收到syn包,必須確認客戶的SYN(ack=j+1),同時本身也發送一個SYN包(syn=k),即SYN+ACK包,此時服務器進入SYN_RECV狀態; 併發

第三次握手:客戶端收到服務器的SYN+ACK包,向服務器發送確認包ACK(ack=k+1),此包發送完畢,客戶端和服務器進入ESTABLISHED狀態,完成三次握手.app

項目中如何處理安全問題tcp

http1.1時如何複用tcp鏈接

Http/1.0每次請求都須要創建新的TCP鏈接,鏈接不能複用。Http/1.1新的請求能夠在上次創建的tcp鏈接之上發送,鏈接能夠複用,即keep-alive。性能

文件上傳如何作斷點續傳

大文件上傳

  1. 前端上傳大文件時使用 Blob.prototype.slice 將文件切片,併發上傳多個切片,最後發送一個合併的請求通知服務端合併切片
  2. 服務端接收切片並存儲,收到合併請求後使用 fs.appendFileSync 對多個切片進行合併
  3. 原生 XMLHttpRequest 的 upload.onprogress 對切片上傳進度的監聽
  4. 根據每一個切片的進度算出整個文件的上傳進度

斷點續傳

  1. 使用 spark-md5 根據文件內容算出文件 hash
  2. 經過 hash 能夠判斷服務端是否已經上傳該文件,從而直接提示用戶上傳成功(秒傳)
  3. 經過 XMLHttpRequest 的 abort 方法暫停切片的上傳
  4. 上傳前服務端返回已經上傳的切片名,前端跳過這些切片的上傳

介紹SSL和TLS(寺庫)說說網絡的五層模型(寺庫)HTTP劫持、DNS劫持與XSS永久性重定向(301)和臨時性重定向(302)對 SEO 有什麼影響介紹下 HTTPS 中間人攻擊請求時瀏覽器緩存 from memory cache 和 from disk cache 的依據是什麼,哪些數據何時存放在 Memory Cache 和 Disk Cache中?說說瀏覽器緩存機制

相關文章
相關標籤/搜索