1. 程式人生 > >你需要掌握的http知識

你需要掌握的http知識

組成 prot 域名 安全 通知 nco 信息 tro http1

作為一名前端er,http是我們必須要掌握的,那麽我們到底需要掌握哪些東西呢

一、基礎知識

這裏我們介紹與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要用什麽方式呢?看圖說話
技術分享圖片

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區別可以參考這篇文章

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緩存)

4xx:

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

5xx:

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

三、身份認證

身份認證主要有以下五種方式
1.承載用戶身份信息的HTTP首部(比如referer)
2.客戶端IP地址跟蹤,通過用戶的IP地址對其進行識別
3.用戶登錄,用認證方式來識別用戶(這裏需要了解token機制)
4.胖URL,一種在URL中嵌入識別信息的技術
5.cookie,一種功能強大且高效的持久身份識別技術

四、安全

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我們需要掌握的基本信息做一個大概的總結,具體的某方面知識建議查看數據去了解,雖然我們在編寫代碼(寫bug中)過程中幾乎不會用到http,但是我們的項目運行卻是離不開它,因此掌握基本的http對性能優化,安全等都是很有幫助的。有書寫錯誤或者解釋錯誤的歡迎指出!

你需要掌握的http知識