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

push 지시문

원문 보기 위키 갱신

push 지시문 (HTTP/2 서버 푸시)

push 지시문은 HTTP/2 서버 푸시를 이용해 서버가 리소스를 클라이언트에 미리 보내도록 설정해요. Link 헤더로 서버 푸시 대상 리소스를 지정할 수 있어요.

출처: Caddy 공식 문서

본문

HTTP/2 서버 푸시를 이용해 서버가 리소스를 클라이언트에 선제적으로 보내도록 설정해요.

응답의 Link 헤더를 지정하면 서버 푸시용 리소스를 연결할 수 있어요. 이 지시문은 업스트림 Link 헤더가 아래 형식으로 설명하는 리소스를 자동으로 푸시해요:

  • <resource>; as=script

  • <resource>; as=script,<resource>; as=style

  • <resource>; nopush

  • <resource>;<resource2>;...

여기서 <resource>는 앞에 슬래시 /로 시작해요(즉, 같은 호스트의 URI 경로). 같은 호스트의 리소스만 푸시할 수 있어요. 연결된 리소스가 외부에 있거나 nopush 속성이 있으면 푸시되지 않아요.

기본적으로 푸시 요청에는 원본 요청에서 복사해도 안전한 것으로 여겨지는 몇 가지 헤더가 포함돼요:

  • Accept-Encoding

  • Accept-Language

  • Accept

  • Cache-Control

  • User-Agent

이 헤더가 없으면 많은 요청이 실패할 것으로 가정되기 때문이며, 수동으로 설정할 필요는 없어요.

푸시 요청은 내부적으로 가상화되어 있어서 매우 가벼워요.

문법 (Syntax)

push [<matcher>] [<resource>] {
	[GET|HEAD] <resource>
	headers {
		[+]<field> [<value|regexp> [<replacement>]]
		-<field>
	}
}
  • ****는 푸시할 대상 URI 경로예요. 블록 안에서 쓰면 선택적으로 메서드(GET 또는 POST; 기본은 GET)를 앞에 붙일 수 있어요.

  • ****는 header 지시문과 같은 문법을 사용해 푸시 요청의 헤더를 조작해요. 일부 헤더는 기본적으로 그대로 이어지므로 명시적으로 설정할 필요는 없어요(위 참고).

예시 (Examples)

응답의 Link 헤더가 설명하는 모든 리소스를 푸시해요:

push

같은 동작이지만, 모든 요청에 대해 /resources/style.css도 함께 푸시해요:

push * /resources/style.css

클라이언트가 /foo.html을 요청할 때만 /foo.jpg를 푸시해요:

push /foo.html /foo.jpg

더 알아보기 (Learn more)