respond
向客户端写入一个硬编码/静态响应。
如果响应主体非空,并且 Content-Type
头部尚未设置,此指令会设置该头部。除非响应主体是有效的 JSON 对象或数组(此时设置为 application/json
),否则默认值为 text/plain; utf-8
。对于所有其他类型的内容,请使用 header
指令 显式设置正确的 Content-Type。
语法
respond [<匹配器>] <状态码>|<响应主体> [<状态码>] {
body <文本>
close
}
-
<状态码> 是要写入的 HTTP 状态码。
如果是
103
(Early Hints),响应将在没有主体的情况下写入,并且处理器链将继续。(HTTP1xx
响应是信息性的,不是最终的。)默认值:
200
-
<响应主体> 是要写入的响应主体。
-
body 是提供响应主体的另一种方式;如果是多行文本则很方便。
-
close 将在写入响应后关闭客户端与服务器的连接。
需要说明的是,第一个非匹配器参数可以是3位状态码或响应主体字符串。如果是响应主体,那么下一个参数可以是状态码。
示例
对所有健康检查写入一个状态码为 200 且主体为空的响应,对所有其他请求写入一个简单的响应主体:
example.com {
respond /health-check 200
respond "Hello, world!"
}
写入错误响应并关闭连接:
example.com {
respond /secret/* "Access denied" 403 {
close
}
}
写入 HTML 响应,使用 heredoc 语法 控制空白,并设置匹配响应主体的 Content-Type
头部:
example.com {
header Content-Type text/html
respond <<HTML
<html>
<head><title>Foo</title></head>
<body>Foo</body>
</html>
HTML 200
}