Express 是 Node.js 生態中最廣泛被採用的極簡網頁框架,自 2009 年釋出以來長期作為伺服器端 JavaScript 的預設選項。專案於 2026 年 10 月 9 日發布 5.3.0 版,在 GitHub 累積 69,570 顆星標與 25,235 次複製,此次更新並未加入大型功能,而是集中處理相依套件的安全漏洞、HTTP 協定細節與回應行為的一致性。本文整理該版本的修補內容、行為變更、專案治理現況與升級方式。

Express 儲存庫 README 開頭,顯示 Express 標誌、標語「Fast, unopinionated, minimalist web framework for Node.js」,以及 npm 下載量、覆蓋率與 OpenSSF Scorecard 徽章

Express 5.3.0 是什麼?

Express 5.3.0 是 Node.js 網頁框架於 2026 年 10 月 9 日發布的版本,採 MIT 授權、GitHub 星標 69,570 顆,主軸為安全修補與 HTTP 合規。

此版本的定位屬於維護型更新。Express 的設計哲學是提供小而穩健的 HTTP 伺服器工具,不強制使用者採用特定 ORM 或模板引擎,並透過社群模組支援十四種以上的模板引擎。框架維持路由、中介軟體、內容協商與 HTTP 輔助方法等核心能力,其餘功能交由生態系補足。

專案目前由技術委員會治理。原始作者為 TJ Holowaychuk,現行技術委員會成員包括 Ulises Gascón、Jon Church、Wes Todd、Linus Unnebäck、Blake Embrey 與 Jean Burellier 等人,並設有分級維護的 Triager 團隊。這種治理結構讓專案在原作者退出後仍能維持穩定節奏,同時對安全回報與版本發布保留明確流程。

Express 5.3.0 修補了哪些安全漏洞?

5.3.0 一次性修補五個 CVE:qs 的陣列上限繞過與阻斷服務、body-parser 的請求大小檢查失效,以及 proxy-addr 的相關弱點。

最主要的修補來自查詢字串解析套件 qs 升至 6.16.0。此版本處理了三個編號漏洞:CVE-2026-2391、CVE-2026-82417 與 CVE-2026-82562,成因分別是逗號解析時的 arrayLimit 繞過,以及攻擊者可控的 isBuffer 造成的阻斷服務。對於對外提供查詢字串解析的服務,這三個漏洞的影響層面最大。

第二組修補位於請求主體解析。body-parser 升至 2.3.0,修正 CVE-2026-12590:當 limit 參數值不合法時,請求大小限制會被靜默停用,形成失效開放狀態,攻擊者可傳送任意大小的載荷造成阻斷服務。修正後,不合法的 limit 值會在解析器初始化階段直接拋出錯誤,而不再被忽略。

第三組修補是 proxy-addr 升至 2.0.8,處理 CVE-2026-90711。此套件負責從代理標頭解析用戶端位址,部署在反向代理後方的服務會直接受益。三組相依套件升級同時涵蓋 5.x 主線與 4.x 維護線,使用舊主線的專案可在 4.22.3 版取得對應的修補。

Express 5.3.0 在 HTTP 協定合規上做了哪些調整?

回應標頭更符合規範:res.send 不再同時送出 Content-Length 與 Transfer-Encoding,重新導向補上完整 HTML 結構。

過去 res.send() 在部分情境會同時輸出 Content-Length 與 Transfer-Encoding 兩個標頭,與 HTTP 規範中兩者不應並存的要求相衝突。修正後,只有在缺少 Transfer-Encoding 時才會加入 Content-Length,而 ETag 產生邏輯不受影響。此調整對中介快取與部分代理伺服器的相容性有直接助益。

res.redirect() 產生的 HTML 回應也一併改善。當用戶端接受 HTML 格式時,回應內容現在包含 <!DOCTYPE html>、<title> 與 <body> 標籤,讓瀏覽器解析更為一致,也讓自動化測試與無障礙工具能正確取得頁面結構。

content-type 套件升至 2.0.0,帶來約一點五倍的解析速度提升,同時改變兩項行為:res.send() 在補上字元集時會保留既有的參數,遇到無法解析的 Content-Type 也不再拋出例外。content-disposition 升至 2.0.1 後,res.download()、res.attachment() 與 res.sendFile() 產生的檔名標頭不再對合法 HTTP token 加引號,符合 RFC 6266 的規定,但若程式碼直接比對標頭位元組,需要同步調整。

Express 5.3.0 有哪些行為變更需要注意?

需留意的變更包括 QUERY 請求納入 req.fresh 判斷、預設錯誤處理器記錄完整錯誤物件,以及 Content-Disposition 標頭格式調整。

req.fresh 過去僅對 GET 與 HEAD 判斷新鮮度,導致帶有相符驗證器的 QUERY 回應無法回傳 304。由於 QUERY 屬於安全、冪等且可快取的請求方法,現在已納入判斷範圍。

// QUERY /reports with If-None-Match: "12345"
app.query('/reports', (req, res) => {
  res.set('ETag', '"12345"');
  res.send(results); // 現在會回應 304 Not Modified
});

預設錯誤處理器的輸出行為亦有調整。過去只記錄堆疊追蹤,嵌套細節例如 Error.cause 與 Sequelize 的 parent、original 屬性會被吞掉;現在改為記錄完整錯誤物件,讓日誌能追溯根因。app.render 在 options 傳入 null 時的處理也已修正,行為與省略 options 或傳入空物件一致。

處理檔案下載的專案要注意標頭格式的變化。res.attachment('user.html') 過去輸出 filename="user.html",現在輸出 filename=user.html;兩者在 RFC 6266 下等價,但比對精確位元組的測試需要更新預期值。效能面則移除了字串回應中重複處理 Content-Type 的開銷。

Express 5.3.0 的專案規模與採用情況如何?

Express 擁有 69,570 顆星標、25,235 次複製與 394 位貢獻者,npm 單月下載量約 6.35 億次,並在 OpenSSF Scorecard 取得 8.9 分。

採用規模是這類基礎設施專案的核心指標。依 npm 統計,Express 在 2026 年 9 月 13 日至 10 月 12 日期間的下載量為 635,513,489 次,前一週則為 145,199,376 次;GitHub 頁面顯示的 npm 徽章標示為每月約六點三六億次下載。這種量級意味著任何行為變更都會沿著依賴鏈擴散,因此維護團隊對相容性的處理相對保守。

69,570Stars
25,235Forks
394累積貢獻者
6.35 億npm 月下載
JavaScript主要語言
MIT授權條款

Express 儲存庫首頁頂部,顯示專案名稱「expressjs/express」、分支與標籤數量、主要語言標示,以及右側 About 區塊的說明與授權資訊

供應鏈與品質訊號同樣值得留意。專案在 OpenSSF Scorecard 取得 8.9 分,測試覆蓋率維持在接近完整的水準,並以 Node.js 26 進行持續整合驗證。這些指標與本次偏向修補與合規的更新方向一致,反映維護團隊把資源放在可預期性而非功能擴張。

Express 儲存庫的貢獻者統計頁面,顯示依提交次數排列的貢獻者清單與歷年貢獻圖表

如何升級到 Express 5.3.0?

執行 npm install [email protected] 即可升級,執行環境需 Node.js 18 以上;仍使用 4.x 的專案建議先閱讀官方 v5 遷移指南再切換主線。

升級流程與一般相依套件更新相同,5.x 使用者直接指定版本號安裝即可取得本次的安全修補與行為修正。由於此次更新包含相依套件的重大版本跳升,部署前建議在測試環境確認回應標頭與錯誤日誌的格式是否符合既有監控規則。

# 升級至 5.3.0
npm install [email protected]

# 仍使用 4.x 主線者,取得對應的修補版本
npm install [email protected]

仍在 4.x 主線的專案可先停留在維護版本,但長期而言需要評估遷移。官方提供 v5 遷移指南,內容涵蓋移除的 API、路徑匹配語法變更與中介軟體行為差異。由於 Node.js 18 為最低執行版本,升級前也應確認執行環境與部署映像檔的版本。

出處連結有哪些?

本文資訊整理自 Express 的 GitHub 儲存庫、5.3.0 版本發布說明、官方 README 與 npm 套件統計,涵蓋修補內容、行為變更與採用數據。

  • GitHub 儲存庫:https://github.com/expressjs/express
  • 5.3.0 版本發布說明:https://github.com/expressjs/express/releases/tag/v5.3.0
  • 官方網站與文件:https://expressjs.com
  • v5 遷移指南:https://expressjs.com/en/guide/migrating-5
  • npm 套件頁面:https://www.npmjs.com/package/express

總結:Express 5.3.0 適合什麼團隊?

適合所有以 Express 建構對外服務的團隊,尤其是部署在代理後方、依賴查詢字串解析或檔案下載功能的專案,應優先完成升級。

5.3.0 的價值在於把基礎設施層的風險一次收斂。三個相依套件的五個 CVE 在同一個版本處理完畢,同時修正標頭衝突與重新導向結構等長期存在卻不顯眼的細節。對於維運既有服務的團隊而言,這類更新比新增功能更直接影響可用性與安全底線。

從維護節奏觀察,Express 並未因下載量龐大而放慢相容性處理,反而在版本說明中清楚標示每一項行為變更與對應的調整方式。由於預設錯誤處理器與標頭格式的變化都會影響既有監控與測試,建議在升級後檢查日誌格式與回應標頭斷言,避免自動化流程出現預期外的判斷結果。