Home
探索 Uedu
學生控制台
註冊會員/登入
研究知情同意中心
教師控制台
課程設定
支援與訊息
Uptime 數據

UeduGPTs

--

Jupyters

4

UG26 CISOSE26
臺北 AQI 46 · 臺中 AQI 28 · 臺南 AQI 24 · 高雄 AQI 33

AI 回覆桌面通知

AI 助教回覆完成時顯示桌面通知

聊天訊息通知

同學在討論區發送訊息時通知

聲音通知

每當有新通知時播放提示音

全球資訊網與 HTTP

全球資訊網與 HTTP:一次網頁載入的完整旅程

從 URL、請求-回應、狀態碼到 Cookie、HTTPS,再深入 HTTP/2 多工與 TLS 握手的演進

當你按下 Enter,瀏覽器到底做了什麼?

想像你在咖啡廳打開瀏覽器,在網址列輸入 https://uedu.tw,按下 Enter。不到一秒,一個完整的網頁就出現在眼前:文字、圖片、按鈕、排版,一應俱全。這個過程看似理所當然,但背後其實牽涉到一連串精密的對話:你的瀏覽器找到了遠在某處的伺服器,向它「提問」,伺服器再把答案「寄回」給你。

這套讓全世界數十億台裝置能彼此交談、交換網頁的規則,就是全球資訊網(World Wide Web)與它的核心協定HTTP。理解它,等於理解了現代網路生活的底層運作邏輯。

全球資訊網不等於網際網路

首先要釐清一個常見迷思:全球資訊網(Web)網際網路(Internet)並不是同義詞。

網際網路是底層的硬體與通訊基礎建設——一張由海底電纜、路由器、Wi-Fi 基地台組成的全球網路,負責把封包(packet)從一台機器送到另一台機器。它就像道路系統。

網路與網際網路概念示意圖

而全球資訊網是「跑在」網際網路之上的一項服務:它定義了如何用超連結(hyperlink)把文件彼此串連,如何用網址定位資源,如何用統一的協定傳遞網頁。Web 是道路上的一種交通工具,電子郵件、線上遊戲、串流影音則是其他工具,它們共用同一張網際網路。

Web 由三大支柱構成:

  • URL:資源的「地址」,告訴瀏覽器要去哪裡找東西。
  • HTTP:傳輸的「規則」,定義瀏覽器與伺服器如何對話。
  • HTML:內容的「格式」,描述網頁的結構與內容。

URL:每個資源的全球唯一地址

URL(Uniform Resource Locator,統一資源定位符)是我們最熟悉的部分。以下面這個網址為例,拆解它的組成:

https://uedu.tw:443/finance/stock?symbol=2330#chart
└─┬─┘   └──┬──┘ └┬┘ └──────┬─────┘ └────┬────┘ └─┬─┘
協定      主機名稱 連接埠   路徑          查詢字串  片段
  • 協定(scheme)https,告訴瀏覽器用哪種協定溝通。
  • 主機名稱(host)uedu.tw,要連到哪一台伺服器。瀏覽器會先透過 DNS(Domain Name System) 把這個名稱解析成 IP 位址。
  • 連接埠(port)443,伺服器上的哪個服務窗口(HTTP 預設 80、HTTPS 預設 443,通常省略)。
  • 路徑(path)/finance/stock,伺服器上的哪個資源。
  • 查詢字串(query string)?symbol=2330,附帶的參數。
  • 片段(fragment)#chart,頁面內的定位點(這部分不會送給伺服器)。

HTTP:一問一答的請求-回應模型

HTTP(HyperText Transfer Protocol,超文本傳輸協定)的核心是一個極為簡單的模型:請求-回應(request-response)。客戶端(client,通常是瀏覽器)送出一個請求,伺服器(server)回傳一個回應。沒有請求,伺服器不會主動說話。

HTTP 還有一個重要特性:無狀態(stateless)。每一個請求對伺服器而言都是全新的、獨立的,伺服器預設不會記得你上一個請求是什麼。這個設計讓伺服器可以輕鬆擴展(任何一台伺服器都能處理任何請求),但也帶來「如何記住使用者已登入」的挑戰——後面講 Cookie 時會回到這點。

動手看一個例子:一次完整的 HTTP 對話

讓我們看看一個真實的 HTTP 請求長什麼樣子。當瀏覽器要取得 /finance/stock 頁面時,它送出的請求是純文字:

GET /finance/stock?symbol=2330 HTTP/1.1
Host: uedu.tw
User-Agent: Mozilla/5.0
Accept: text/html
Cookie: session_id=a3f8b2c1

第一行是請求行:方法(GET)、路徑、HTTP 版本。接著是一行行的標頭(header),攜帶額外資訊(你是誰、接受什麼格式、帶了哪些 Cookie)。

伺服器處理後回傳:

HTTP/1.1 200 OK
Content-Type: text/html; charset=utf-8
Content-Length: 1024
Set-Cookie: session_id=a3f8b2c1; HttpOnly; Secure

<!DOCTYPE html>
<html>
  <body><h1>台積電 2330</h1></body>
</html>

第一行是狀態行:版本、狀態碼(200)、原因短語(OK)。接著是回應標頭,一個空行之後,就是回應主體(body)——也就是真正的 HTML 內容。

HTTP 方法:你想做什麼?

HTTP 用方法(method)表達請求的意圖。最常用的兩個:

方法 用途 參數位置 特性
GET 取得資源(讀) URL 查詢字串 安全、可快取、可被書籤記錄
POST 提交資料(寫) 請求主體 通常改變伺服器狀態

一個關鍵差異:GET 的參數暴露在 URL 中,會留在瀏覽器歷史紀錄與伺服器日誌裡,因此絕不該用 GET 傳送密碼POST 把資料放在請求主體,較適合提交表單、上傳檔案。

其他常見方法還有 PUT(更新)、DELETE(刪除)、PATCH(部分更新),它們構成了 RESTful API 設計的基礎。一個重要概念是冪等性(idempotency):同一個請求執行多次與執行一次結果相同。GETPUTDELETE 是冪等的,POST 則不是(連按兩次「送出訂單」可能下兩筆單)。

狀態碼:伺服器的三位數回答

狀態碼(status code)是伺服器對請求結果的簡短回答,分為五大類:

類別 範圍 意義 常見例子
1xx 100–199 資訊 100 Continue
2xx 200–299 成功 200 OK、201 Created
3xx 300–399 重新導向 301 永久搬移、302 暫時
4xx 400–499 客戶端錯誤 404 找不到、403 禁止、401 未授權
5xx 500–599 伺服器錯誤 500 內部錯誤、503 服務不可用

記住一個原則:4xx 是「你(客戶端)的問題」,5xx 是「我(伺服器)的問題」。看到 404 表示你要的資源不存在,看到 500 則表示伺服器自己出錯了。

Cookie 與 Session:讓無狀態的 HTTP「記得你」

前面提到 HTTP 是無狀態的,那為什麼你登入一次後,瀏覽整個網站都不用重新登入?答案是 Cookiesession(會話)

機制是這樣的:

  1. 你登入成功後,伺服器產生一個獨一無二的 session id,並透過 Set-Cookie 標頭把它送回瀏覽器。
  2. 瀏覽器把這個 Cookie 存起來,之後對同一網站的每個請求都自動附上 Cookie: session_id=...
  3. 伺服器收到請求時,用 session id 查出「這是已登入的某某某」,於是知道你是誰。

換句話說,真正的使用者資料(你的帳號、權限)存在伺服器端的 session 裡,瀏覽器只保管一張「號碼牌」(session id)。這個設計也說明了為什麼 session id 的安全至關重要——拿到它就等於冒充你。因此安全的 Cookie 應設定:

  • HttpOnly:禁止 JavaScript 讀取,防範跨站腳本攻擊(XSS)竊取。
  • Secure:只在 HTTPS 連線傳送,避免被竊聽。
  • SameSite:限制跨站請求攜帶 Cookie,防範跨站請求偽造(CSRF)

HTTPS:把明信片裝進保險箱

純 HTTP 有個致命問題:所有資料都以明文傳輸。你的密碼、Cookie、瀏覽內容,在傳輸途中的任何一個節點(咖啡廳的 Wi-Fi、ISP、惡意的中間人)都能被看光光。這就像寄明信片,沿途每個郵差都能讀。

HTTPS 是「HTTP over TLS」——在 HTTP 之下加了一層 TLS(Transport Layer Security,傳輸層安全)加密。它提供三重保障:

  • 機密性(confidentiality):資料加密,竊聽者只看到亂碼。
  • 完整性(integrity):資料若被竄改會被偵測。
  • 身分驗證(authentication):透過數位憑證(certificate)確認你連到的真的是 uedu.tw,而不是假冒網站。

憑證由受信任的憑證授權中心(CA, Certificate Authority)簽發,瀏覽器內建了信任的 CA 清單,因此能驗證憑證真偽。這就是網址列那把鎖頭的意義。

前端與後端:一個網頁的兩個世界

最後補上一組重要概念。現代網站的開發通常分為兩端:

  • 前端(front-end):在你的瀏覽器中執行,由 HTML(結構)、CSS(樣式)、JavaScript(互動)構成,負責呈現畫面與使用者互動。
  • 後端(back-end):在伺服器上執行,處理商業邏輯、存取資料庫、驗證權限。例如 Uedu 平台使用 Python 的 Flask 框架。

兩端透過 HTTP 溝通:前端送出請求(常是取得 JSON 資料的 API 呼叫),後端回傳資料,前端再用 JavaScript 把資料渲染成畫面。這種分工讓網頁能像桌面應用一樣流暢,也是「前端工程師」「後端工程師」分工的由來。

重點回顧

  • Web ≠ Internet:網際網路是底層硬體道路,全球資訊網是跑在上面的服務,由 URL、HTTP、HTML 三大支柱構成。
  • HTTP 是無狀態的請求-回應協定:客戶端提問、伺服器回答,每個請求彼此獨立。
  • 狀態碼分五類:2xx 成功、3xx 重導、4xx 是客戶端的錯、5xx 是伺服器的錯。
  • Cookie + session 補足無狀態的記憶:伺服器存資料、瀏覽器保管 session id 號碼牌;務必加上 HttpOnlySecureSameSite 防護。
  • HTTPS 用 TLS 提供機密性、完整性與身分驗證,是現代網站的安全基線。

深入探討(研究所視角)

從 HTTP/1.1 到 HTTP/2:對抗隊頭阻塞

HTTP/1.1(1997 年標準化)長期是 Web 的主力,但它有個結構性瓶頸:在單一 TCP 連線上,請求必須依序處理。雖然 1.1 引入了持久連線(keep-alive)讓多個請求複用同一條連線,避免反覆建立 TCP 的開銷,但回應仍須照順序回傳。如果第一個請求很慢(例如一張大圖),後面的請求即使早已準備好也得排隊等待,這稱為隊頭阻塞(Head-of-Line Blocking, HOL blocking)

當時瀏覽器的權宜之計是對同一網域開 6 條平行 TCP 連線,並把資源拆散到多個網域(domain sharding),但這治標不治本,且每條連線都要付出 TCP 與 TLS 握手的成本。

HTTP/2(2015,RFC 7540,源自 Google 的 SPDY)的核心革新是多工(multiplexing)。它把通訊抽象為串流(stream):在單一 TCP 連線上,多個請求與回應被切成帶有串流識別碼的二進位訊框(frame),交錯傳輸、互不阻塞。其他關鍵特性包括:

  • 二進位分幀(binary framing):訊息以二進位訊框傳輸,比 1.1 的純文字更易解析、更省頻寬。
  • 標頭壓縮(HPACK):HTTP 標頭高度重複(如每次都送的 User-AgentCookie),HPACK 用靜態與動態字典壓縮,大幅減少冗餘。
  • 伺服器推送(server push):伺服器可主動推送預期會用到的資源(後來因實效不彰逐漸棄用)。

值得注意的是,HTTP/2 解決了應用層的隊頭阻塞,卻無法解決傳輸層(TCP)的隊頭阻塞——一旦底層 TCP 封包遺失,整條連線上所有串流都得等重傳。這個殘留問題正是 HTTP/3 改用 QUIC(建立在 UDP 之上、把多工與遺失復原下放到傳輸層)的動機。

TLS 握手:在不安全的通道上建立信任

HTTPS 的安全來自 TLS,而 TLS 的關鍵是連線開始時的握手(handshake)。問題的核心是:雙方如何在一條可能被竊聽的通道上,協商出一把只有彼此知道的對稱加密金鑰?答案是非對稱加密金鑰交換的巧妙結合。

TLS 1.2 的典型握手為例,簡化流程如下:

  1. Client Hello:客戶端送出支援的 TLS 版本、加密套件(cipher suite)清單,以及一個隨機數。
  2. Server Hello + Certificate:伺服器選定加密套件,回傳自己的數位憑證(內含公鑰,由 CA 簽署)與一個隨機數。客戶端驗證憑證的簽章鏈,確認伺服器身分。
  3. 金鑰交換:雙方透過 Diffie-Hellman 等演算法協商出預主金鑰(pre-master secret)。採用 ECDHE(橢圓曲線臨時 DH)時,每次連線用臨時金鑰,即使伺服器私鑰日後外洩,過去的通訊也無法被解密——這個性質稱為前向保密(forward secrecy)
  4. 產生對稱金鑰:雙方各自從預主金鑰與兩個隨機數推導出相同的會話金鑰(session key)
  5. Finished:交換加密驗證訊息,之後所有應用資料改用快速的對稱加密傳輸。

這裡的設計哲學值得玩味:非對稱加密慢但能在不安全通道建立信任,對稱加密快但需要預先共享金鑰。TLS 因此用非對稱加密「安全地交換對稱金鑰」,再用對稱金鑰「高速地加密大量資料」,兼得安全與效率。

TLS 1.2 完整握手需要兩個來回(2-RTT),在高延遲網路上明顯拖慢首次連線。TLS 1.3(2018,RFC 8446)將握手精簡為 1-RTT,並支援對重訪網站的 0-RTT 恢復;它同時移除了 RC4、靜態 RSA 金鑰交換等不安全的舊機制,強制要求前向保密。當 HTTP/2 或 HTTP/3 搭配 TLS 1.3,整個「建立安全連線 + 開始多工傳輸」的延遲被壓到最低,這正是當代 Web 效能與安全並進的縮影。

從這個角度回望本文開頭那「不到一秒」的網頁載入:它其實是 DNS 解析、TCP/QUIC 連線、TLS 握手、HTTP 多工請求、前端渲染這一整套機制協同運作的成果。理解每一層,才能在效能調校、資安防禦與系統設計上做出有依據的判斷。

AI 共讀助教正在陪你讀:全球資訊網與 HTTP:一次網頁載入的完整旅程
嗨!我是這篇文章的共讀助教,只根據〈全球資訊網與 HTTP:一次網頁載入的完整旅程〉的內容回答。可以問我「解釋某段」「舉個例子」「出題考我」,或反白文中段落後點下方「解釋選取段落」。