respond 지시문
respond 지시문 (고정 응답 작성)
respond 지시문은 하드코딩된(정적인) 응답을 클라이언트에 써줘요. 헬스체크나 간단한 테스트 응답을 만들 때 유용해요.
출처: Caddy 공식 문서
본문
클라이언트에게 하드코딩된/정적 응답을 작성해요.
본문이 비어있지 않으면, Content-Type 헤더가 아직 설정되지 않았을 때 이 지시문이 설정해요. 기본값은 text/plain; utf-8이며, 본문이 유효한 JSON 객체나 배열이면 application/json으로 설정돼요. 그 외 모든 종류의 콘텐츠는 header 지시문으로 적절한 Content-Type을 명시적으로 설정해요.
문법 (Syntax)
respond [<matcher>] <status>|<body> [<status>] {
body <text>
close
}
-
****는 작성할 HTTP 상태 코드예요.
103(Early Hints)이면 본문 없이 응답이 작성되고 핸들러 체인이 계속돼요. (HTTP1xx응답은 정보성이며 최종이 아니에요.)기본값:
200 -
****는 작성할 응답 본문이에요.
-
body는 본문을 제공하는 또 다른 방법이에요. 여러 줄일 때 편리해요.
-
close는 응답을 작성한 후 클라이언트 연결을 닫아요.
정리하면, matcher가 아닌 첫 번째 인자는 3자리 상태 코드이거나 응답 본문 문자열이에요. 본문이라면 다음 인자가 상태 코드일 수 있어요.
에러 상태 코드로 응답하는 것은 핸들러 체인에서 에러를 반환하는 것과 달라요. 후자는 내부적으로 에러 핸들러를 호출해요.
예시 (Examples)
모든 헬스체크에 빈 200 상태와 빈 본문을, 나머지 요청에는 간단한 응답 본문을 작성해요:
example.com {
respond /health-check 200
respond "Hello, world!"
}
에러 응답을 쓰고 연결을 닫아요:
error 지시문을 대신 사용하는 걸 선호할 수도 있어요. error는 handle_errors 지시문으로 처리할 수 있는 에러를 트리거해요.
example.com {
respond /secret/* "Access denied" 403 {
close
}
}
heredoc 문법으로 공백을 제어하면서 HTML 응답을 쓰고, 응답 본문에 맞는 Content-Type 헤더도 설정해요:
example.com {
header Content-Type text/html
respond <<HTML
<html>
<head><title>Foo</title></head>
<body>Foo</body>
</html>
HTML 200
}