HTTP 的手術室

來客

時間定格在早上 6 點,伴隨着 「噠噠噠」 的聲響,瀏覽器地址欄出現了 https://blog.acohome.cn 瀏覽器知道,又是一個早高峯來襲。跨域

「各部門就緒!」 瀏覽器老大,一聲令下,各部門都開始作起了準備工做。瀏覽器

「去 HTTP 服務部,記住你的請求方式是 GET,還有這些請求頭也一塊兒拿走。」 伴隨着 Enter 的輸入,瀏覽器老大對新生成的 URL 說道。緩存

「瀏覽器老大讓我來找你!」 URL 飛奔到個人辦公室說道。服務器

「好,請求方式?」 我一看時間,早上 6 點,知道早高峯即未來臨,趕緊說道。工具

GET測試

「請求頭有嗎?」code

「有!URL 拿出一個袋子說道。」cdn

OK」 說着,我拿起放在一旁的麻醉針,一針下去,URL 進入了休眠。沒錯個人辦公室就是個人手術室。blog

拿起一旁的手術刀,手起刀落,取出 URL<path>?<query> 部分,拿起一個袋子,扔入 GET 字符,取出的部分以及我記錄的版本號 HTTP/1.1,膠帶一卷,打包放在一旁。ip

「請求行 OK,接下來是請求頭。」 我自言自語道,順手拿起了 URL 帶過來的袋子。

「讓我檢查檢查。嗯,AcceptCookieUser-Agent...,而後加上 Host。」 我一邊檢查,一邊再次拿出手術刀,把 URLHOST 部分切下,放入袋中。

OK」 確認無誤後,打包,放到了剛剛打包好的請求行下面。

GET 沒有請求體,直接生成報文。」 按照流程,我將打包好的請求行與請求頭一併丟入了辦公室一旁的通道中。

「接下來就交給 Tcp 兄弟啦。」 我對着通道喊道。

duang ~」 通道一頭髮出物體碰撞的聲音 「能不能事先通知下,個人腦殼禁不起你這麼砸!」 通道另外一側來了句抱怨。

「下次必定注意,如今早高峯,急了點!」

迴歸

duang ~ 」 頭上被撞了個大包,我憤怒的喊道:「Tcp 你幹嗎!!」

「早高峯,早高峯 ~」 通道的另外一頭傳來了 Tcp 略帶報復的聲音。「這是剛剛請求的響應,快處理吧!」

「行!」 我拿起了手術刀,將剛剛的 URL 進行了拼裝,順便把響應報文給大切八塊。

伴隨着一盆冷水潑下,URL 甦醒過來。

「這袋響應頭信息,我已經按照鍵值對弄好了,這堆是響應體,我這處理不了,你就這樣帶走吧。」 對着剛剛甦醒的 URL 說道。

「能不能不是每次都潑水啊,個人髮型!」 URL 抱怨道。

「別囉嗦了,快去瀏覽器老大那!瀏覽器老大都快等不及了。」

「行吧!」 瀏覽器老大着急的樣子他但是知道的,帶着東西,URL 趕緊往瀏覽器那兒跑去。

開始忙碌

「我回來了,這是數據。」 URL 跑的有點喘不過氣來。

瀏覽器理都沒理 URL,一頭鑽進了 URL 一旁的響應體中。

「文檔解析器給我上,CSS 你也別閒着啊,沒看到這有 style 嗎?JavaScript 你也趕忙的動起來。」 瀏覽器老大指揮道。

「這有個 link 須要 CSS 資源!」 文檔解析器說道。「這還有個 script 使用的是外部腳本,須要 xxx.js。」

「好的,我立刻生成 URL 去請求資源。」 瀏覽器老大邊說,邊生成了一系列的 URL,命令他們去 HTTP 服務部。

看着蜂擁而至的 URL,我攥了攥手中的工具,知道,早高峯來了。

不久,HTTP 服務部排起了長隊。一批批的 URL 來,又有一批批的 URL 帶着包裹出去。

終於瀏覽器老大叫來了 GPU 顯示了頁面,忙碌的早高峯過去了。我拿起一旁還冒着熱氣的咖啡,喝了一口。

Post URL

JavaScript 讓我到你這!」 一個 URL 跑了過來。不一樣與以前的 URL 這個 URL 除了帶着一袋請求頭,還帶了一箱數據。

放下手中的咖啡,「請求方式?」 我問道。

POSTURL 說道。

「看來用戶開始提交數據了啊。」 說着,我拿起了放在一旁的麻醉針。

「請求行:POST /create HTTP/1.1 沒毛病。」

「請求頭」 我拿起 URL 帶過來的請求頭,檢查一遍後,加入了 Host 並打包。

「這些數據我控制不了,直接塞到請求體中吧。」 我把數據按請求行,請求頭,請求體放好,打包後,扔進了一旁的通道里。再次端起了桌子上的咖啡喝了一口。

過了大約 5 秒,通道蹦出來一個報文,我知道這是剛剛的那個 Post URL,拿起個人工具,拆解了數據後,讓 URL 回到 JavaScript 那。

我是誰

忙碌的早高峯終於過去,清閒的時間開始,正式介紹下我本身,我,HTTP 服務,根據 HTTP(超文本傳輸協議)生成報文,報文也就是剛剛被我扔進通道的東西。

超文本傳輸協議將報文分紅了 3 部分,根據報文的不一樣,格式也有所區別,也是我這間手術室存在的意義。

請求

內容 含義
請求行 請求方式 + 請求路徑 + 協議版本。
請求頭 表明瀏覽器信息以及當前請求的狀態,好比 HostAcceptUser-Agent 等。
請求體 當前請求所攜帶的數據,提供給服務器上對應的處理程序使用。

大概就長這樣吧。

請求報文

響應

內容 含義
響應行 協議版本 + 狀態碼 + 狀態碼解釋短語
響應頭 表明服務器信息以及當前響應的狀態,好比 DateETagServer 等。
響應體 當前響應所攜帶的數據,提供給瀏覽器上的處理程序使用。

大概就長這樣吧。

響應報文

請求方式

不一樣的請求方式表明了對資源不一樣的處理,雖然這個是 URL 直接給個人,但所表明的具體意義我仍是知道的。

請求方式 含義
GET 返回請求路徑所對應的資源。
HEAD 不須要返回資源,僅返回響應行和響應頭便可。
POST 向請求路徑提交數據,建立新的資源。
PUT 更新請求路徑所對應的資源。
PATCH 更新請求路徑所對應的部分資源。
DELETE 刪除請求路徑所對應的資源。
OPTIONS 獲取請求路徑對應資源的信息(是否可可跨域獲取,能夠支持哪些請求方式等)。
TRACE 直接返回請求,主要用於測試。

狀態碼

不一樣的響應狀態碼,對應了不一樣的資源狀態。

狀態碼 含義
1** 服務器收到請求,須要請求者繼續執行操做。
2** 請求成功。
3** 資源移動或是未發生變動,須要瀏覽器進行下一步操做,請求移動後的地址,或直接使用緩存資源。
4** 請求錯誤,包括請求語法錯誤,或是資源不存在。
5** 服務器錯誤,資源存在,但服務器處理時發生錯誤。

OK HTTP 大體內容也就這些,只是一個協議嘛,不是太複雜。

「還沒介紹響應頭、請求頭啊!」 辦公室裏忽然出現一個聲音。

「等用到的時候說也來得及。」 我想也沒想的回了,看着空蕩蕩的手術室,陰風吹過,頓時驚出一身冷汗。

「room 屠宰場。」 聲音再次出現:「我是要成爲海賊王的男人。」

「見鬼了??」 我有點慌張。「聽着聲音好像來着屏幕外?奇怪」

相關文章
相關標籤/搜索