文档
一个 项目

响应匹配器

响应匹配器 可以用于根据特定标准过滤(或分类)响应。

这些通常仅作为配置出现在某些其他指令中,以便在响应写入客户端时对其做出决策。

语法

@name {
	status <code...>
	header <field> [<value>]
}

匹配器

status

status <code...>

通过 HTTP 状态码。

  • <code...> 是 HTTP 状态码的列表。特殊情况是像 2xx3xx 这样的字符串,它们分别匹配 200-299300-399 范围内的所有状态码。

示例

@success status 2xx
header <field> [<value>]

通过响应 header 字段。

  • <field> 是要检查的 HTTP header 字段的名称。
    • 如果以 ! 为前缀,则该字段必须不存在才能匹配(省略 value 参数)。
  • <value> 是字段必须具有的匹配值。
    • 如果以 * 为前缀,则执行快速后缀匹配(出现在末尾)。
    • 如果以 * 为后缀,则执行快速前缀匹配(出现在开头)。
    • 如果用 * 包围,则执行快速子字符串匹配(出现在任何位置)。
    • 否则,它是快速精确匹配。

同一集合内的不同 header 字段之间是 AND 关系。每个字段的多个值之间是 OR 关系。

请注意,header 字段可能会重复并具有不同的值。后端应用程序必须考虑到 header 字段值是数组,而不是单个值,并且 Caddy 不会解释此类困境中的含义。

示例

匹配包含值 barFoo header 的响应

@upgrade header Foo *bar*

匹配 Foo header 值为 barbaz 的响应

@foo {
	header Foo bar
	header Foo baz
}

匹配根本没有 Foo header 字段的响应

@not_foo header !Foo