headers
標頭 (headers) 允許您在特定路徑的傳入請求回應中設置自訂 HTTP 標頭。
要設置自訂 HTTP 標頭,您可以在 next.config.js
中使用 headers
鍵:
headers
是一個非同步函數,預期返回一個包含具有 source
和 headers
屬性的物件陣列:
source
:傳入請求的路徑模式。headers
:回應標頭物件的陣列,具有key
和value
屬性。basePath
:false
或undefined
- 如果為 false,匹配時不會包含 basePath,僅可用於外部重寫。locale
:false
或undefined
- 匹配時是否不包含語言環境。has
:具有type
、key
和value
屬性的 has 物件 陣列。missing
:具有type
、key
和value
屬性的 missing 物件 陣列。
標頭檢查優先於檔案系統,包括頁面和 /public
檔案。
標頭覆蓋行為
如果兩個標頭匹配相同路徑並設置相同的標頭鍵,最後一個標頭鍵將覆蓋第一個。使用以下標頭,路徑 /hello
將導致標頭 x-hello
的值為 world
,因為最後設置的標頭值是 world
。
路徑匹配
允許路徑匹配,例如 /blog/:slug
將匹配 /blog/hello-world
(不包含巢狀路徑):
萬用字元路徑匹配
要匹配萬用字元路徑,您可以在參數後使用 *
,例如 /blog/:slug*
將匹配 /blog/a/b/c/d/hello-world
:
正則表達式路徑匹配
要匹配正則表達式路徑,您可以將正則表達式包裹在參數後的括號中,例如 /blog/:slug(\\d{1,})
將匹配 /blog/123
但不匹配 /blog/abc
:
以下字符 (
、)
、{
、}
、:
、*
、+
、?
用於正則表達式路徑匹配,因此當在 source
中作為非特殊值使用時,必須在它們前面添加 \\
進行轉義:
標頭、Cookie 和查詢匹配
僅當標頭、Cookie 或查詢值也匹配 has
欄位或不匹配 missing
欄位時,才應用標頭。source
和所有 has
項目必須匹配,且所有 missing
項目必須不匹配,標頭才會被應用。
has
和 missing
項目可以具有以下欄位:
type
:String
- 必須是header
、cookie
、host
或query
之一。key
:String
- 要匹配的所選類型的鍵。value
:String
或undefined
- 要檢查的值,如果為 undefined,則任何值都將匹配。可以使用類似正則表達式的字符串來捕獲值的特定部分,例如,如果值first-(?<paramName>.*)
用於first-second
,則second
將在目標中使用:paramName
。
支援 basePath 的標頭
當與標頭一起使用 basePath
支援 時,每個 source
會自動前綴 basePath
,除非您在標頭中添加 basePath: false
:
支援 i18n 的標頭
當與標頭一起使用 i18n
支援 時,每個 source
會自動前綴以處理配置的 locales
,除非您在標頭中添加 locale: false
。如果使用 locale: false
,您必須在 source
前添加語言環境才能正確匹配。
Cache-Control
您不能在 next.config.js
中為頁面或資源設置 Cache-Control
標頭,因為這些標頭在生產環境中會被覆蓋,以確保回應和靜態資源被有效緩存。
了解更多關於使用應用程式路由器的 快取。
選項
CORS
跨來源資源共享 (CORS) 是一種安全功能,允許您控制哪些網站可以訪問您的資源。您可以設置 Access-Control-Allow-Origin
標頭以允許特定來源訪問您的 路由處理程序。
X-DNS-Prefetch-Control
此標頭 控制 DNS 預取,允許瀏覽器主動對外部連結、圖片、CSS、JavaScript 等執行域名解析。此預取在後台執行,因此當需要引用項目時,DNS 更有可能已被解析。這減少了用戶點擊連結時的延遲。
Strict-Transport-Security
此標頭 通知瀏覽器應僅使用 HTTPS 訪問,而不是使用 HTTP。使用以下配置,所有當前和未來的子網域將使用 HTTPS,有效期為 2 年(max-age
)。這會阻止訪問只能通過 HTTP 提供的頁面或子網域。
如果您部署到 Vercel,則不需要此標頭,因為除非您在 next.config.js
中聲明 headers
,否則它會自動添加到所有部署中。
X-Frame-Options
此標頭 指示網站是否應允許在 iframe
中顯示。這可以防止點擊劫持攻擊。
此標頭已被 CSP 的 frame-ancestors
選項取代,現代瀏覽器對此有更好的支援(詳見 內容安全政策 的配置細節)。
Permissions-Policy
此標頭 允許您控制瀏覽器中可以使用哪些功能和 API。它以前稱為 Feature-Policy
。
X-Content-Type-Options
此標頭 防止瀏覽器在未明確設置 Content-Type
標頭時嘗試猜測內容類型。這可以防止允許用戶上傳和共享文件的網站遭受 XSS 攻擊。
例如,用戶嘗試下載圖片,但將其視為不同的 Content-Type
(如可執行文件),這可能是惡意的。此標頭也適用於下載瀏覽器擴展。此標頭的唯一有效值是 nosniff
。
Referrer-Policy
此標頭 控制瀏覽器在從當前網站(來源)導航到另一個網站時包含多少信息。
Content-Security-Policy
了解更多關於為您的應用程式添加 內容安全政策 的信息。
版本歷史
版本 | 變更 |
---|---|
v13.3.0 | 新增 missing 。 |
v10.2.0 | 新增 has 。 |
v9.5.0 | 新增標頭功能。 |