您當前的位置:首頁 > 文化

你需要掌握的http知識

作者:由 九思 發表于 文化時間:2019-05-28

零、為什麼要學

回答這個問題很簡單,因為面試官會問,而且還問的不少!相信經歷過面試的同學基本都被問過http快取,並由此展開一些列問答。當然學習好http還可以 幫你快速排查一些問題,比如安全問題。本文將羅列一系列知識點,儘量覆蓋各個方面,對每個點不會詳細講解,但是會提供一些優秀的文章連結供大家深入學習。此外大家可以檢視[http技能圖譜](

https://

github。com/Stevenzwzhai

/study-source/blob/master/skill-map/http%E5%9B%BE%E8%B0%B1。png

)來更直觀的檢視相關知識點。

一、基礎知識

與http相關的TCP、IP、DNS、url、uri

1。IP

IP地址是我們很熟悉的東西,最常見的的就是127。0。0。1。我們都知道連線網路後,每臺機器都會有不同的IP地址,也有自己的mac地址(這個地址是硬體寫死的),那麼我們傳輸資訊的時候只要知道對方的IP地址,然後再和mac地址配對就基本可以確定接受資訊方;而傳輸過程中我們肯定是希望資訊高效傳遞過去,那麼傳輸方式以及傳輸路徑就要找到最好的方式。IP協議就是做這些事情的,IP是指IP協議而不是我們常常說的IP地址,它位於網路層,所要做的事情主要是以下三點:

1)定址和路由;

2)傳遞服務;

3)資料包的分片和重組;

2。TCP

首先按照分層,TCP位於傳輸層,提供位元組流服務。那麼什麼是位元組流呢?網路傳輸資料就像汽車運輸貨物一樣,比如我們運輸的是訊號塔,這麼大不可能一下子運到目的地,這時候就需要一部分一部分運過去,再組裝起來。而TCP確保資料能到達目的地。運輸貨物我們打個就可以通知是否送到了,TCP要用什麼方式呢?看圖說話

你需要掌握的http知識

tcp三次握手

還有四次揮手

3。DNS

我們要訪問一臺伺服器的東西,需要知道它的地址,IP地址可以作為一個標識,但是四個數字是很不好記的,因此誕生了域名這個東西,

比如www。qq。com

,我們可以訪問到騰訊主頁,但這個是怎麼找到對應到騰訊的伺服器呢?DNS服務就是幹這個的,它處於應用層,當然它也可以透過IP來查詢對應的域名。

4。URL和URI

URL: 統一資源定位符

URI: 統計資源識別符號

URI用來標識某個網際網路資源,而URL是資源的位置,所以URL是URI的子集。這裡知道簡單區別即可。

二、http報文

http報文分為請求報文和響應報文,HTTP請求報文:一個HTTP請求報文由請求行、請求頭部、空行和請求資料4部分組成。HTTP響應報文:由三部分組成:狀態行、訊息報頭、響應正文。綜合兩種報文,我們把報文分為一下結構

你需要掌握的http知識

1。請求行

主要呈現請求的基本資訊,包括請求的目標,協議版本,以及請求方法。目標就是一個url,比如我們要請求的網址或者跟後端協定好的介面地址。協議版本指http1。0、http1。1等。請求方法最常見的GET、POST,在http1。1總共有八種,這裡不再一一闡述,最常見的GET、POST區別可以參考 [這篇文章](

http://

mp。weixin。qq。com/s?

__biz=MzI3NzIzMzg3Mw==&mid=100000054&idx=1&sn=71f6c214f3833d9ca20b9f7dcd9d33e4#rd

2。狀態行

狀態行就主要表示請求結果了,這裡主要涉及狀態碼後面第三部分會說到

3。首部欄位

這裡首部欄位就有通用首部欄位、請求首部欄位以及響應首部欄位三種。

常用的首部欄位比如Date(日期),Pragma、cache-control(快取相關),Upgrade(協議升級,比如使用websocket)等。

請求首部欄位比如Accept-*系列(表示優先順序的,Charset字符集,Encoding編碼,Language語言等),快取類的(Etag和modified相關),referer(請求方)等。

相應首部欄位比如快取相關(Etag和modified相關),伺服器資訊(Server),重定向(Location)等。

4。其他

http中未定義的一些欄位,比如cookie

5。報文主體

請求報文主要是請求資訊,query、body引數等。響應報文主要是伺服器返回的資訊。

三、狀態碼

1xx:

資訊型別,表示在處理了。

2xx:

成功型別。比如常見的200,伺服器處理成功但是不返回實體資訊的204等。

3xx:

需要附加操作的,比如重定向(301永久重定向,302臨時重定向)和使用快取(304,這裡結合幾個首部欄位使用,具體可以參考[http快取](

http快取

))

4xx:

客戶端錯誤,比如引數錯誤(400),認證失敗(401),沒有訪問許可權(403),資源不存在(404)等

5xx:

伺服器錯誤,比如服務端執行錯誤或者故障(500),伺服器暫時無法處理(503),超時(504),協議有問題(505)等

三、身份認證

身份認證主要有以下五種方式

1。承載使用者身份資訊的HTTP首部(比如referer)

2。客戶端IP地址跟蹤,透過使用者的IP地址對其進行識別

3。使用者登入,用認證方式來識別使用者(這裡需要了解token機制)

4。胖URL,一種在URL中嵌入識別資訊的技術

5。cookie,一種功能強大且高效的持久身份識別技術

[詳細瞭解](

https://

blog。csdn。net/wyq_tc25/

article/details/51794262

四、安全

1。請求頭中的安全機制

CSP策略

可以採用請求頭設定方式

Content-Security-Policy: policy

Content-Security-Policy: default-src ‘self’(自定義)

當然也可以在meta標籤中設定,比如(來自mdn)。

X-Frame-Options

防止點選劫持

X-XSS-Protection

控制瀏覽器XSS防止的開關

2。cookie安全

比如cookie加密,設定HttpOnly和secure

五、其他

https:四次握手,ssl/tls協議,加密等。

http2:優勢,多路複用、頭部壓縮、流的優先順序等。[詳細](

又拍雲:一文讀懂 HTTP/2 特性

http3: 可以瞭解下。[詳細](

一文看完HTTP3的演化歷程 - InfoQ

六、總結

這裡只針對http我們需要掌握的基本資訊做一個大概的總結,具體的某方面知識建議檢視書籍去了解,雖然我們在編寫程式碼(寫bug中)過程中幾乎不會用到http,但是我們的專案執行卻是離不開它,因此掌握基本的http對效能最佳化,安全等都是很有幫助的。有書寫錯誤或者解釋錯誤的歡迎指出!

標簽: http  請求  報文  首部  比如