본문 바로가기
WIKI 기술 지식 베이스

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)이면 본문 없이 응답이 작성되고 핸들러 체인이 계속돼요. (HTTP 1xx 응답은 정보성이며 최종이 아니에요.)

    기본값: 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
}

더 알아보기 (Learn more)