What is HTTP? 從生活中的故事一次看懂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,但文章有點長了,我們就下次見吧!
作者: 周家鋐 — — 浚鋐網路科技有限公司 創辦人