面試 | 你要懂得http相關

前言

前端在面試過程當中,也會遇到網絡層面的一些問題,這些有的可能會在平時業務中用到,有的可能就是單純造火箭。下面我彙總了一些我在面試中遇到的,以及我複習的一些面試相關的東西。html

http緩存(高頻考點,送分題)

http緩存基本面試中都會考到,主要記憶點爲強緩存、協商緩存。前端

加分點:web

強緩存:from memory cache,from disk cache什麼區別?Expires和Cache-Control的區別面試

協商緩存:兩個標誌位的區別。chrome

參考答案

http緩存分爲強緩存和協商緩存。強緩存就是瀏覽器緩存,資源直接從瀏覽器中獲取。協商緩存就是資源會從cdn去獲取。瀏覽器

強緩存的判斷標誌有兩個,Expires這個標識實在http1.0以前用的,表示的是過時時間,可是客戶端和服務端時間存在不一樣步問題,因此在http1.1以後加入了Cache-Control,這個表示的是距離請求發出時的時間,是一個相對時間比較精確。緩存

強緩存即爲瀏覽器緩存,分爲兩類from memory cache,from disk cache,返回的狀態碼都爲200.二者的區別是from memory cache是從內存中取。from disk cache是從硬盤中取。若是是刷新當前頁面,且內存環境比較充裕的狀況下,返回from memory cache。可是若是是返回上一個頁面或者當前內存環境不充裕的狀況下,返回的是from disk cache。安全

協商緩存的判斷標識:Last-Modified和ETag。ETag是文件每次生成的hash,是惟一的準確性高,可是比較繁瑣以及消耗性能。而Last-Modified是以秒級爲單位的文件生成時間,比較不精確。由於1s中文件可能屢次生成。判斷的優先標準是ETag。其次是Last-Modified。服務器

http緩存的判斷過程:先判斷Cache-Control的值,這裏不細講,好比max-age=300,那麼在五分鐘以內都會觸發強緩存。若是已通過了5分鐘以後,會進入協商緩存階段。發出去的http請求中會帶有兩個標示位, If-Modified-Since(來自第一次請求返回頭中的Last-Modified)和If-None-Match(來自第一次請求返回頭中的ETag)。兩個標示位的區別我在上面已經說了,根據標示位判斷文件是否更新,若是更新返回狀態碼200以及資源。若是沒有更新,只返回狀態碼304網絡

TCP握手過程和分手過程

參考答案

TCP握手過程:客戶端發送ACK包給服務端。當服務端接收到ACK包以後,向客戶端發送ACK+SYN包。客戶端接收到ACK+SYN包以後,向服務端返回SYN包。

三次握手是識別客戶端發送和接收能力的最小安全次數。

四次揮手過程:

一、客戶端像服務端發送fin包,以後客戶端不能發送數據,只能讀取數據。

二、服務端收到fin包以後,像客戶端發送ACK包,此時服務端只能發送數據,不能接收數據。

三、當數據發送完畢以後,服務端會發送fin包給客戶端。此時服務端不能讀取數據也不能接收數據

四、當客戶端收到fin包時,將發送ack包給服務端,本身等待足夠多的時間,便進入closed狀態。服務端接收到ack包的時候,也會進入到closed狀態。

爲何揮手過程要4次?

由於TCP是雙工通道,服務端和客戶端都可以發送和接收數據。兩邊是同時運轉的。

https的握手過程

參考答案

https的握手過程分爲兩步:證書校驗和數據傳輸

一、客戶端訪問web服務器,服務器返回數字簽名(公鑰,證書信息,服務端信息,hash值)。

二、客戶端經過證書機構頒發的私鑰對數字簽名進行解密。校驗證書信息和服務端信息以後,生成隨機數,用公鑰進行加密。

三、數據返回給服務端以後,服務端使用相應的私鑰進行解密,獲得隨機數。

四、以後服務端與客戶端就經過隨機數的對稱加密方式進行交互。

HTTPS 握手過程當中,客戶端如何驗證證書的合法性

參考答案

拿到服務端給的數字簽名以後,客戶端會根據機構頒發的私鑰對數字簽名的東西進行解密。解密出來,內部會含有服務端信息和證書的信息。

證書信息須要校驗如下幾方面:

一、頒發證書的第三方機構(CA)是否受客戶端的信任。

二、對比系統時間校驗證書是否在有效期。

三、經過CRL或者OCSP的方式校驗證書是否被吊銷。

四、經過校驗對方是否存在證書的私鑰,判斷證書的網站域名是否與證書頒發的域名一致。

https的對稱加密和非對稱加密瞭解多少

參考答案

對稱加密的加解密鑰匙是同一個,密鑰在傳輸過程當中容易被第三方截取,安全性相對較低。

非對稱加密一共有一對鑰匙,分爲公鑰和私鑰。公鑰進行加密過程,私鑰用於解密過程。性能上相對於對稱加密來的低。

非對稱加密和對稱加密在https中的應用:因爲性能緣由,https只有在第一次創建的時候會使用非對稱加密,以後的過程都是走隨機數的對稱加密方式。

https的中間人攻擊

參考答案

中間人攻擊就是在沒有ca證書以前,公鑰在傳輸過程當中也能夠被截獲。

中間人截獲公鑰以後,將公鑰替換成本身的公鑰。

而後客戶端收到僞造公鑰以後,用其進行加密操做以後,返回給服務端。

在返回過程當中,中間者再次將數據截獲,用私鑰進行解密。

解密完成以後,將數據在用真公鑰進行加密,返回給服務端。

全部數據至關於在明文傳輸。

http2和http1.1之間的區別

參考答案

主要區別在如下4個點:

一、二進制傳輸:http2.0的數據是以二進制的形式傳輸的,最小單位是幀,多個幀組成數據流的形式傳輸。而http1.1如下是以明文文本格式傳輸的。明顯二進制傳輸方式更加高效

二、頭部壓縮:http1.1的時候在每次請求都會攜帶大量重複頭部信息。可是在http2.0的時候,只須要發送改變的頭部信息就行。

三、服務器推送:服務端能夠在發送html的時候主動推送其餘資源,不須要等瀏覽器在請求到相應位置的時候再去請求。

四、多路複用,詳細能夠看下面一個問題

簡單講解一下http2的多路複用

參考答案

http/1每次請求都會創建一次tcp連接,也就是咱們說的三次握手四次揮手。這個過程是很是耗時的,儘管能夠開啓keep-alive去避免屢次鏈接的問題。可是仍是存在一下兩個問題:

一、串行的文件傳輸方式。文件傳輸的過程是,當a文件傳輸時,b文件只能等待。而a文件在傳輸過程當中,須要經歷鏈接服務,服務器處理文件,以及斷開服務等三個過程。假設每一個過程耗時1s,那麼a文件耗時就是3s,那麼b文件傳輸完成就是6s

二、鏈接數過多。當客戶端發起多個請求時,瀏覽器會對請求的併發數作一個限制,chrome的最大併發數是6個,那麼第7個請求的時候就須要等前面的請求完成以後,才能拿到相應的結果。

而http2以後,改爲了二進制傳輸,也就多了幀和流的概念。

數據在一個tcp鏈接中按流的形式傳輸,幀就是其中最小的傳輸單位,而幀中帶有標示位,能夠識別是從哪一個流中來的,到服務端以後,服務端會將幀數據從新整合成流,也就是所說的多路複用。

http的請求報文由什麼組成

參考答案

http報文分爲請求報文和相應報文。他們分別分爲4個部分:

一、請求行/響應行:請求行由方法,URL,http版本組成。好比:GET /index.html HTTP/1.1。響應行由http版本和狀態碼組成,好比:HTTP/1.1 200ok

二、請求頭部/響應頭部:頭部由一些key:value的字段組成

三、空行:做用主要是用來分割頭部和實體。

四、請求體/響應體:請求體主要攜帶post時候的一些參數。響應體主要攜帶服務端返回的一些數據。

http的狀態碼有哪些

這裏就介紹一些經常使用的狀態碼

參考答案

1XX:臨時響應

2XX:成功

  • 200 OK:表示請求被服務端處理並正確返回
  • 206 Partial Content,進行範圍請求。

3XX:重定向

  • 301 moved permanently,永久性重定向,表示資源已被分配了新的 URL
  • 302 found,臨時性重定向,表示資源臨時被分配了新的 URL
  • 304 not modified,表示服務器容許訪問資源,但因發生請求未知足條件的狀況

4XX:客戶端錯誤

  • 400 bad request,請求報文存在語法錯誤
  • 403 forbidden,表示對請求資源的訪問被服務器拒絕
  • 404 not found,表示在服務器上沒有找到請求的資源

5XX:服務端錯誤

  • 500 internal sever error,表示服務器端在處理請求時發生了錯誤

http的經常使用字段有哪些

參考答案 通用字段:
  • Cache-Control 控制緩存
  • Connection 鏈接管理、逐條首部
  • Transfor-Encoding 報文主體的傳輸編碼格式

請求字段:

  • Accept 客戶端或者代理可以處理的媒體類型
  • If-None-Match 比較實體標記(ETage)
  • If-Modified-Since 比較資源更新時間(Last-Modified)
  • Range 實體的字節範圍請求
  • Authorization web的認證信息
  • Host 請求資源所在服務器
  • User-Agent 客戶端程序信息

響應字段:

  • Location 令客戶端重定向的URI
  • ETag 可以表示資源惟一資源的字符串
  • Server 服務器的信息
相關文章
相關標籤/搜索