確認過眼神,看清 HTTP 協議

2022-01-10 11:00:31 字數 3755 閱讀 5362

在了解http之前,我們需要了解什麼是網路通訊模型(也就是我們常說的 osi 模型)

osi 模型是對網路中資料是如何被傳送和接收的乙個具象化的展示,如下圖展示

在 osi 中我們所處在最頂層,我們所有的網路的行為,資料的傳遞都是從頂至下然後在從下至頂完成一次傳遞的。每一層都會有對應的一些協議,協議就好比是資料的'通行證',有些協議會把我們的資料加密,讓它更安全,有些協議幫助資料建立通道,指明去路。而我們這次要說的 http 協議屬於應用層中的協議,它的主要作用就是傳遞資源,建立通道讓我們更加方便的去訪問網路資源。資源必須是通過 url 位址可以訪問到的,包括但不限於,資料,檔案等等。

我們已經知道了 http 協議在 osi 中的位置以及功能。那麼現在我們就來看看它神秘面紗下的樣子吧。

我們稱呼 http 內容為報文,乙個 http 由請求報文和響應報文組成,最方便的報文檢視就是瀏覽器開發者工具的 network 這一項

以上是訪問後檢視到的請求報文 (request headers) 和響應報文(response headers)。完整的請求就是客戶端傳送請求,伺服器返回響應,關閉連線

請求和響應的格式長得差不多,它們都是由:

那麼現在讓我們進一步分析所展示的資料吧

3.1 request url:請求位址 (目前資源所在的位址)

3.2 request method: 請求方法,請求方法是使用 http 動詞來對目標資源進行操作,常用的請求方法有如下7種

get:用於請求訪問已被url識別的資源,可以通過url傳參給伺服器

post:用於傳輸資訊給伺服器

put:傳輸檔案,報文體中包含檔案內容,儲存在對應的url位置

head:獲得報文首部,與get方法相似,只是不返回報文主體,一般用於驗證乙個內容是否正常存在,或者url是否有效

options:返回伺服器可用的方法(請求方法)

trace:檢視http協議有沒被修改。

delete :刪除對應url位置的檔案

3.3 status code: 狀態碼,不同的狀態碼代表不同情況,如下羅列一些常用狀態碼

如果過需要了解詳細

3.4 remote address:遠端位址,這個位址代表的是伺服器所在ip位址

3.5 refer policy: 這是用來監管哪些訪問**資訊,no-referrer-when-downgrade (預設值),意思是在沒有指定任何策略的情況下使用者**的預設行為。在同等安全級別的情況下,引用頁面的位址會被傳送( https->https ),但是在降級的情況下不會被傳送 ( https->http )。

具體請檢視—>

4.1 connection: keep-alive,這個 header 表示客戶端和伺服器在一次請求和響應之後不要關閉連線

但是為什麼要使用這個頭部呢?原因是在早期的 http 1.0中,每發出乙個請求都要建立乙個連線,但是建立連線的過程是乙個損耗資源的過程,所以在後期的 http/1.0 以及 http/1.1 中引入了重用連線機制,需要新增該請求頭,而在 http/1.1 中已經預設是長連線了。

4.2 content-encoding:gzip,這個 header ****主要是設定資料壓縮,在 web 應用中我們通常都要開啟gzip壓縮,這樣使得我們的資料體積更小,所占用的頻寬也更小所以達到了效能優化的目的

4.3 content-type: text/html; charset=utf-8,這個 header 表明了資源型別,因為我們訪問的是網頁所以型別便是 text-html 而我們設定的編碼是 utf-8

4.4 date:表示報文建立的日期

4.5 server: nginx,這個 header 表明伺服器型別,nginx 說明使用了**伺服器,也許並不是應用真正的伺服器型別

4.6 set-cookie: 被用來服務端向客戶端設定 cookie

4.7 strict-transport-security: 這是乙個安全設定,表示只有 https (一種加密的 http 協議,通常可以代替第6層 osi 模型的功能)才能訪問

4.8 transfer-encoding: 訊息首部指明了將 entity 安全傳遞給使用者所採用的編碼形式。chunked表示資料以一系列分塊的形式進行傳送

5.1 accept:請求頭用來告知客戶端可以處理的內容型別,這種內容型別用mime型別來表示。借助內容協商機制, 伺服器可以從諸多備選項中選擇一項進行應用,並使用content-type應答頭通知客戶端它的選擇

5.2 accept-encoding: 會將客戶端能夠理解的內容編碼方式——通常是某種壓縮演算法——進行通知。通過內容協商的方式,服務端會選擇乙個客戶端提議的方式,使用並在響應報文首部

5.3 content-encoding中通知客戶端該選擇。

5.4 accept-language: 請求頭允許客戶端宣告它可以理解的自然語言,以及優先選擇的區域方言。

5.5 cashe-control: 設定快取

5.6 cookie: 客戶端傳遞的 cookie

5.7 user-agent: 表明客戶端一些基本裝置資訊

本文中我們學習了 osi 模型,知道了 http 協議是在模型的那一層,知道了乙個完整的http請求是怎麼樣的,然後通過 chrome devtools 分析了乙個完整的 http 請求,我們知道了常用的請求方法,常用的網路狀態碼,響應頭以及請求頭,還有一些常用到的 header。但是本文介紹的只是http中的一小部分,還有很多有用的 header 等待我們去發現,以及還有 http 2.0 版本的激動人心的新特性。下面給大家安利乙個常用** (mdn)如果你是 web 開發者千萬不要錯過,這個**囊括了關於 web 開發全路線教程。

最後祝願大家每天早下班,**無bug,迎娶白富美,走向人生巔峰

hellogithub **三年,github 上已經獲得超過 1萬顆 ⭐

確認過眼神,遇上IT人

突發感想寫點東西,不是為培訓出來的人正名的,只是 想以乙個剛培訓出來的人的身份說說感受。說說培訓的初衷 自學,說實話,怕自己自制力不夠,而且也容易學著學著丟了方向。選擇培訓能夠讓自己比較專注高效的學習。主要是有人規劃方向,學畢竟是靠自己去理解去敲 的。萬事開頭難,只是想讓入行 系統一點。培訓帶來的,...

確認過眼神,你是喜歡Stream的人

摘要 在學習node的過程中,stream流是常用的東東,在了解怎麼使用它的同時,我們應該要深入了解它的具體實現。今天的主要帶大家來寫一寫可讀流的具體實現,就過來,就過來,上碼啦!初始化引數 開啟檔案 讀取檔案 結束,關閉檔案 var readstream require readstream.js...

確認過眼神,我們都是社會主義加班人

部分素材來自 杭州我最懂 程式人生等 這年頭,不加班都不好意思說自己是程式猿。此前,一位 人在杭州親見了阿里 網易 華為的加班程度後,發表了巨頭公司們的加班時刻表,下面我們就一起來感受下他們瘋狂加班的樣子。首先出場的阿里巴巴 首先出場的是阿里。19 55 00 00的阿里巴巴蜂巢,燈火通明,光彩耀人...