你需要掌握的http知識
零、為什麼要學
回答這個問題很簡單,因為面試官會問,而且還問的不少!相信經歷過面試的同學基本都被問過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要用什麼方式呢?看圖說話
tcp三次握手
還有四次揮手
3。DNS
我們要訪問一臺伺服器的東西,需要知道它的地址,IP地址可以作為一個標識,但是四個數字是很不好記的,因此誕生了域名這個東西,
比如www。qq。com
,我們可以訪問到騰訊主頁,但這個是怎麼找到對應到騰訊的伺服器呢?DNS服務就是幹這個的,它處於應用層,當然它也可以透過IP來查詢對應的域名。
4。URL和URI
URL: 統一資源定位符
URI: 統計資源識別符號
URI用來標識某個網際網路資源,而URL是資源的位置,所以URL是URI的子集。這裡知道簡單區別即可。
二、http報文
http報文分為請求報文和響應報文,HTTP請求報文:一個HTTP請求報文由請求行、請求頭部、空行和請求資料4部分組成。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對效能最佳化,安全等都是很有幫助的。有書寫錯誤或者解釋錯誤的歡迎指出!
上一篇:徹悟 道德經 第18章 失本逐末
下一篇:孤辰寡宿