What is HTTP? 從生活中的故事一次看懂HTTP

Chiahong Chou
6 min readAug 16, 2020

--

http

每天打開瀏覽器,總是輸入 http(s)://… 但,你真的了解它嗎?

歷史

HTTP (Hyper Transfer Protocol) 中文為 超文本傳輸協定。 早期是由 全球資訊網協會 World Wide Web Consortium (W3C) 所制定的一套 用來發布和接收 HTML 頁面的協定(也就是方法、strategy… you name it)。

後來又經過 Internet Engineering Task Force (IETF) 網際網路工程任務組 進行協調,陸續分佈一系列的版本,最終變成一個通行已久的版本: HTTP 1.1

之後 2015 又出現了 HTTP/2 變成現在的 HTTP 標準。

那到底什麼是HTTP呢?

我相信不管是在寫網路爬蟲、網站前後端、或是手機App的朋友在剛學習時都會碰到這個關卡。

而今天,我就以網路應用的角度並舉簡單的例子來分享什麼是HTTP。

HTTP 簡單來說 就是 客戶端 和 伺服器端 之間的 溝通原則。

舉個例來說:

今天我到了一間五金行,我問老闆:「老闆,請問你們家電池在哪裡?」(REQUEST 請求)

老闆回答:「等一下,我找一下嘿」(Processing 後端處理)

過了一陣子,老闆接著說:「啊!有了!我這邊有賣家用電池在第幾排第幾層,還有賣汽車電池在第幾排第幾層。」 (RESPONSE 回應)

從這個例子可以看出來,要簡化來講的話 HTTP 就是描述一種溝通模式,而這種模式要符合這個標準:

客戶(瀏覽器、手機) REQUEST -> 老闆(伺服器)server RESPONSE

而像剛剛這個例子,就是一個很簡單的 GET 方法 模型。

模型

剛剛這只是GET request 的一個簡單例子,但HTTP有的不只這些。

我們剛才提到 HTTP 是描述一種「溝通原則」。

那這個「原則」是什麼呢?

這個「原則」其實很簡單,就是客戶做一種請求,老闆(伺服器)做一種事情。

這種客戶和老闆之間的一問一答(Request — Response),就是HTTP的模型。

請求 Request

但這種請求可以有很多種,例如:

GET (我要問一件事情,你有GET到嗎?)POST (PO限時、發討拍文、送出google表單)PUT / PATCH (更改大頭貼照,偷偷改朋友的帳號密碼)DELETE (刪除多年前的醜照)

所以,

如果我今天要做的事情是:得到一個想要的答案,我就會用GET request

如果我今天想要發送一個內容:我就會用POST request

我今天想要更改內容已經存在的內容,我就會用PUT/ PATCH

如果我想刪除一筆資料,這時候就用 DELETE

而在做這些簡單的動作之後呢,伺服器就會根據你要求做不同的請求,做出不同的回應。

Middleware 中介軟體

這個詞可以代表非常多的意思,這邊我就講他在HTTP request 中扮演的角色。

回到剛剛五金行的例子,如果今天我以一個客戶的身份到五金行,結果我突然問了一個不該問的問題,例如:

「老闆我可以問你一個月賺多少嗎?」

這時候就會有一個東西(Middleware)跳出來 看一下你是誰?

如果你是他老婆,可能可以,但是你是客戶,所以他就會跳出來跟你說:「你不行!」

像這樣的例子,就是典型的 Auth Middleware (authentication 身份驗證 中介軟體)(當然 middleware有很多種,這邊只是舉一個最常用的例子)

他會判斷說你做這件事情,有沒有這個資格。

而判斷的標準,可能就來自你身上的東西。(Header)

Header (HTTP頭欄位)

這個Header可以把它想成你的「行頭」 — — 你身上帶的東西。

這就像有時候我們去找一個人問問題,或是一個工具人要找一個正妹吃飯時,如果對方很勢利,他(她)第一句話可能就會問:「你錢帶夠了沒?」「你開什麼車?」「你有沒有住大安區?」「月薪有沒有5萬?」「你那隻錶是勞力士嗎?」

這就是Header的用意。

回到剛剛你想問老闆一個月賺多少錢被打槍的例子。

如果今天你跟老闆娘都長很像,或是那個社區剛好每個人都跟韓國團體一樣每個長一樣,穿著都很像,那老闆要怎樣判斷你是不是他老婆,他願意好好回答你問題?

答案就是行頭(Header):原來老婆有戴結婚戒指啦!

剛剛的例子可能舉得有點極端,但是在網路的世界就是這樣:大家都長很像。

舉個實際的例子:

有沒有想過這個問題:「當你在瀏覽Facebook的時候,他怎麼知道現在是你的帳號,而不是別人的帳號,所以給你看只有你能看到的訊息?」

無論你在電腦上看也好,在手機上看也好,這就是來自於你的Header。

現在很多新的網站都使用 Bearer Token 這種 方式來判斷登入。它的原理就是在你的Header裡面放一個:

Authorization: Bearer

講簡單一點就是讓你的每個人身上配備一把鑰匙(token)

當你做HTTP Request (向老闆問問題)的時候,亮出你那把鑰匙,他就知道你是誰,該不該給你什麼東西,或是該給你什麼東西。

以上大概就是今天的HTTP簡介拉,如果喜歡歡迎分享,也會給我動力之後寫更多教學的文章。若有時間,我還會再分享完整版的架設網站教學影片(包含 Django, React, HTML, CSS, Js)

本來今天還要分享 HTTP Status Code 和 Restful API,但文章有點長了,我們就下次見吧!

作者: 周家鋐 — — 浚鋐網路科技有限公司 創辦人

--

--

Chiahong Chou

Self-taught full-stack web developer from Taichung, Taiwan. Specialized in React, Gatsby, Node, Django……Vim as my favorite text editor 浚鋐網路科技有限公司創辦人