iT邦幫忙

2025 iThome 鐵人賽

DAY 6
0

前言

HTTP 也就是 Hypertext Transfer Protocol 超文本傳輸協議,不管是前端或後端,只要是在web 領域,HTTP協議都是必須掌握的技能之一。

基本介紹

http 模組是 Node.js 的核心模組之一,提供了創建 HTTP 伺服器和客戶端的功能。它基於流 (Stream) 和事件 (Event) 架構,能夠高效處理 HTTP 請求和回應。

在開始之前,還是再多整理一些基礎知識,畢竟這是一開始的初衷,不要停留在只是會用而已。

HTTP 協議

什麼是HTTP?

HTTP 是一個用來傳輸網頁內容的通訊協議,就像是瀏覽器和伺服器之間的"對話規則"。
簡單來說就是:

  • 你在瀏覽器輸入網址 → 瀏覽器向伺服器發送HTTP請求
  • 伺服器處理請求 → 回傳網頁內容給瀏覽器
  • 瀏覽器接收到內容 → 顯示網頁給你看

HTTP的基本特性

無狀態 (Stateless)

每次請求都是獨立的,伺服器不會記住之前的請求

請求-響應模式

客戶端發送請求 → 伺服器回應,一來一往,就像聊天對話

基於TCP/IP

建立在可靠的網路連接基礎上,確保資料能正確傳達

HTTP請求的結構

一個HTTP請求包含三個部分:

請求行 (Request Line)
請求標頭 (Headers)
請求主體 (Body,可選)

請求行範例

GET /index.html HTTP/1.1
  • GET: HTTP方法
  • /index.html: 要請求的資源路徑
  • HTTP/1.1: HTTP版本

常見的HTTP方法

方法 用途 說明
GET 獲取資料 像是瀏覽網頁、看文章
POST 提交資料 像是登入、註冊、發文
PUT 更新資料 修改整個資源
DELETE 刪除資料 刪除某個資源
PATCH 部分更新 只修改資源的一部分

HTTP響應的結構

伺服器的回應也有固定格式:

狀態行 (Status Line)
響應標頭 (Headers)
響應主體 (Body)

狀態行範例

HTTP/1.1 200 OK
  • HTTP/1.1: HTTP版本
  • 200: 狀態碼
  • OK: 狀態描述

常見的HTTP狀態碼

2xx 成功

  • 200 OK: 請求成功
  • 201 Created: 資源創建成功
  • 204 No Content: 成功但沒有內容回傳

3xx 重新導向

  • 301 Moved Permanently: 資源永久移動
  • 302 Found: 資源暫時移動
  • 304 Not Modified: 資源沒有變更

4xx 客戶端錯誤

  • 400 Bad Request: 請求格式錯誤
  • 401 Unauthorized: 需要身份驗證
  • 403 Forbidden: 沒有權限訪問
  • 404 Not Found: 資源不存在
  • 405 Method Not Allowed: HTTP方法不被允許

5xx 伺服器錯誤

  • 500 Internal Server Error: 伺服器內部錯誤
  • 502 Bad Gateway: 閘道錯誤
  • 503 Service Unavailable: 服務不可用

一些重要的HTTP Headers

請求標頭

Host: www.example.com          // 目標主機
User-Agent: Mozilla/5.0...     // 瀏覽器資訊
Accept: text/html              // 可接受的內容類型
Authorization: Bearer token    // 身份驗證

響應標頭

Content-Type: text/html        // 內容類型
Content-Length: 1024           // 內容長度
Set-Cookie: sessionId=abc123   // 設定Cookie
Cache-Control: max-age=3600    // 快取控制

最後簡單整理一個對照表

部分 HTTP 請求 (Request) HTTP 響應 (Response)
起始行 Request Line<方法> <路徑> <HTTP版本>例:GET /index.html HTTP/1.1 Status Line<HTTP版本> <狀態碼> <狀態文字>例:HTTP/1.1 200 OK
標頭 Request Headers附帶請求資訊(誰在發送、能接受什麼)例:Host: www.example.comUser-Agent: Mozilla/5.0Authorization: Bearer abc123 Response Headers附帶回應資訊(伺服器身份、資料型態、快取、Cookie)例:Content-Type: application/jsonContent-Length: 85Set-Cookie: sessionId=abc123
主體 Request Body (可選)送往伺服器的資料,例如表單、JSON、檔案例:{ "username": "kelvin", "password": "123456" } Response Body (可選)伺服器回傳的資料,例如 HTML、JSON、圖片例:{ "message": "Login success", "user": { "id": 1, "name": "Kelvin" } }

參考

Evolution of HTTP


上一篇
Day5 - Node.js FS 模組
系列文
欸欸!! 這是我的學習筆記6
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言