Documentation
a project

respond

Writes a hard-coded/static response to the client.

If the body is non-empty, this directive sets the Content-Type header if it is not already set. The default value is text/plain; utf-8 unless the body is a valid JSON object or array, in which case it is set to application/json. For all other types of content, set the proper Content-Type explicitly using the header directive.

Syntax

respond [<matcher>] <status>|<body> [<status>] {
	body <text>
	close
}
  • <status> is the HTTP status code to write.

    If 103 (Early Hints), the response will be written without a body and the handler chain will continue. (HTTP 1xx responses are informational, not final.)

    Default: 200

  • <body> is the response body to write.

  • body is an alternate way to provide a body; convenient if it is multiple lines.

  • close will close the client's connection to the server after writing the response.

To clarify, the first non-matcher argument can be either a 3-digit status code or a response body string. If it is a body, the next argument can be the status code.

Examples

Write an empty 200 status with an empty body to all health checks, and a simple response body to all other requests:

example.com {
	respond /health-check 200
	respond "Hello, world!"
}

Write an error response and close the connection:

example.com {
	respond /secret/* "Access denied" 403 {
		close
	}
}

Write an HTML response, using heredoc syntax to control whitespace, and also setting the Content-Type header to match the response body:

example.com {
	header Content-Type text/html
	respond <<HTML
		<html>
			<head><title>Foo</title></head>
			<body>Foo</body>
		</html>
		HTML 200
}