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