Lesson 7: 網路共通語-HTTP 協定核心
前面介紹了比較多實務上的內容,內容也相對扎實,接下來我們就進到比較輕鬆的環節,這篇文章主要探討HTTP以及相關延伸的概念。
什麼是Http
HTTP(超文字傳輸協定,HyperText Transfer Protocol)是全球資訊網 (World Wide Web) 的基礎,它是一種應用層協定,用於在用戶端和伺服器之間傳輸超媒體文件(例如 HTML 頁面)。HTTP 是網路上的共通語言。
HTTP (HyperText Transfer Protocol,超文字傳輸協定) 是全球資訊網 (World Wide Web) 的資料通訊基礎。
它位於 OSI 模型的應用層,是電腦之間交換資訊時遵循的一套規則。如果說 TCP/IP 像是網路世界的郵局和道路,那麼 HTTP 就是與伺服器之間溝通的「語言」。
OSI模型是什麼
相信離開資訊相關科系後,這些學術內容(計算機概論)大家跟我一樣都拋在腦後了,所以我們來簡單複習一下。
OSI模型分成七層:應用層、表示層、工作層、傳輸層、網路層、資料連結層、實體層
基本上工作後大多只會碰到應用層
應用層就是大家耳熟能詳的:Http,Https,FTP,SMTP之類的
Http的應用
HTTP 採用經典的客戶端-伺服器端 (Client-Server) 模式,整個過程就是一個不斷循環的請求-回應 (Request-Response) 循環。
用戶端 (Client, 通常是瀏覽器):發起請求,要求存取特定資源(如 HTML 文件、圖片、API 資料)。
伺服器端 (Server, 網站主機):接收請求,處理資料,並回傳回應。
Request
作為後端工程師,我們每天都在接受請求後進行回應,一個完整的請求包含以下
請求行
請求行由:請求方法(Method)、請求目標(path/路由)、請求版本 組合而成。
請求版本
其實回應速度也會跟Http版本有關,以下提供Http1.1/2/3之間的比較


常見 HTTP 方法 (Method)
這是實現 RESTful API 的基礎。

請求標頭 (Request Headers)
包含額外的元數據,以 Key-Value 形式呈現,是控制請求行為的關鍵,以下我挑幾個重點介紹:
User-Agent:Client端的類型(如OS , 瀏覽器版本)
Accept:Client端接受的回應類型 (例如:application/json, text/html , / )
Content-Type:主體中發送的數據格式 (例如:application/json, application/x-www-form-urlencoded)
Cookie:瀏覽器發送給伺服器的 Cookie 資料,用於身份識別
Authorization:身份驗證資訊 (例如:Bearer Token)
請求主體 (Request Body)
僅在 POST、PUT、PATCH 等方法中出現。它攜帶了實際要提交給伺服器處理的數據,例如表單數據、JSON 物件等。
Response
Response就是 server 端接受到request後,結束處理丟回去給client端的回應
基本上跟Request沒差多少,比較不一樣的是:status code
Status Code
這裡就針對常見的status code進行介紹。
但實際上大家都很懶,我還真沒看過真的哪家公司完全照status code的定義回傳的
成功類
200 - 請求成功,回傳資源
201 - created,資源新增成功
204 - No Content ,請求成功,但不回傳資源
重定向
301 - 永久轉址
302 - 暫時轉址
Client的問題
400 - 請求格式有誤
401 - Unauthorized,沒有身份驗證(沒有登入)
403 - Forbidden,沒權限
404 - 找不到資源
413 - 請求過大
429 - 請求頻率過高
Server的問題
500 - Internal Server Error ,程式碼發生未預期的錯誤
503 - Service Unavailable ,伺服器臨時超載或維護
HTTP 的核心特性
無狀態性
HTTP 協定本身不保留任何用戶端的連線狀態或歷史資訊。每個請求和回應都被視為一次獨立的事件。為了維持使用者體驗(例如登入狀態),通常會透過 Cookies 或 Session 等技術來彌補無狀態的限制。
補充:傳統登入做法就是session id存在前端cookie,因為前端請求會攜帶cookie到後端,後端就拿cookie中的session id 找 session就知道是哪個User了。
一次性
在 HTTP/1.0 中,每次請求發送完畢並收到回應後,TCP 連線就會被關閉。雖然 HTTP/1.1 及後續版本引入了持久連線 (Persistent Connection) 來重複使用連線以提高效率,但 HTTP 協定本身仍是基於請求/回應的模式。
補充:實務上如果需要保持連線,多半會使用websocket(一樣是 應用層的協議)
HTTP 與 HTTPS 的差異
差一個S,差在哪?
Https就是Http多一個secure,簡單來說就是比較安全,那安全在哪?
在 HTTP 之下加入了 安全通層協定/傳輸層安全,將所有傳輸的資料進行加密,提供資料機密性和完整性,以及伺服器身份驗證。這對於處理信用卡號碼、密碼等敏感資訊的網站至關重要。HTTPS 預設使用443 port,而 HTTP 預設使用80 port。
相信大家很常聽到Https的S就是SSL,但其實在現代化的網路中SSL已經全面改成TLS了。
從前 (1990s): HTTPS = HTTP + SSL
現在 (實際標準): HTTPS = HTTP + TLS
SSL 3.0 之後就被廢棄,所有現代瀏覽器與伺服器都使用 TLS 1.2 或 TLS 1.3。
ps.前陣子忘記在哪裡看到有人在吵Https的S到底是不是TLS,甚至有人去截圖維基百科說S明明是指Secure,但人家百科後面明明還有寫:常稱為HTTP over TLS、HTTP over SSL或HTTP Secure。
不管S指的是TLS還是Secure,就是因為用TLS加密封包才會比較Secure。

