文档
一个 项目

header

操作 HTTP 响应 header 字段。它可以设置、添加和删除 header 值,或使用正则表达式执行替换。

默认情况下,header 操作会立即执行,除非正在删除任何 header(- 前缀)或设置默认值(? 前缀)。在这些情况下,header 操作会自动延迟到写入客户端时。

要操作 HTTP 请求 header,您可以使用 request_header 指令。

语法

header [<matcher>] [[+|-|?|>]<field> [<value>|<find>] [<replace>]] {
	# Add
	+<field> <value>

	# Set
	<field> <value>

	# Set with defer
	><field> <value>

	# Delete
	-<field>

	# Replace
	<field> <find> <replace>

	# Replace with defer
	><field> <find> <replace>

	# Default
	?<field> <value>

	[defer]
}
  • <field> 是 header 字段的名称。

    没有前缀时,该字段将被设置(覆盖)。

    使用 + 前缀添加字段,而不是在字段已存在时覆盖(设置)该字段;header 字段可以在请求中出现多次。

    使用 - 前缀删除字段。该字段可以使用前缀或后缀 * 通配符删除所有匹配的字段。

    使用 ? 前缀为字段设置默认值。该字段仅在尚不存在时写入。

    使用 > 前缀设置字段,并启用 defer,作为快捷方式。

  • <value> 是 header 字段值,在添加或设置字段时。

  • <find> 是要搜索的子字符串或正则表达式。

  • <replace> 是替换值;执行搜索和替换时是必需的。使用 $1$2 等来引用搜索模式中的捕获组。如果替换值为 "",则匹配的文本将从值中删除。有关详细信息,请参阅 Go 文档

  • defer 将强制 header 操作延迟到响应写入客户端时。当使用 - 删除任何 header 字段、使用 ? 设置默认值或使用 > 前缀时,将自动启用此功能。

对于多个 header 操作,您可以打开一个块,并以相同的方式在每行指定一个操作。

当使用 ? 前缀设置默认 header 值时,如果它在包含多个 header 操作的 header 块中,则会自动将其分离到其自己的 header 处理程序中。 在底层,使用 ? 配置一个 响应匹配器,该匹配器应用于指令的整个处理程序,该处理程序仅应用 header 操作(如 defer),但仅当字段尚未设置时才应用。

示例

在所有请求上设置自定义 header 字段

header Custom-Header "My value"

移除 “Hidden” header 字段

header -Hidden

在任何 Location header 中将 http:// 替换为 https://

header Location http:// https://

在所有页面上设置安全和隐私 header:(警告: 仅在您了解其含义时使用!)

header {
	# disable FLoC tracking
	Permissions-Policy interest-cohort=()

	# enable HSTS
	Strict-Transport-Security max-age=31536000;

	# disable clients from sniffing the media type
	X-Content-Type-Options nosniff

	# clickjacking protection
	X-Frame-Options DENY
}

旨在互斥的多个 header 指令

route {
	header           Cache-Control max-age=3600
	header /static/* Cache-Control max-age=31536000
}

如果上游未定义缓存过期时间,则设置默认缓存过期时间

header ?Cache-Control "max-age=3600"
reverse_proxy upstream:443

要覆盖代理上游为以 /no-cache 开头的路径设置的缓存过期时间;启用 defer 是必要的,以确保 header 在代理写入其 header 之后 设置

header /no-cache* >Cache-Control nocache
reverse_proxy upstream:443

要执行 Set-Cookie header 的延迟更新以添加 SameSite=None;使用 regexp 捕获来获取现有值,并使用 $1 将其重新插入到开头,并附加额外的选项

header >Set-Cookie (.*) "$1; SameSite=None;"