이 페이지는 Apigee 및 Apigee Hybrid에 적용됩니다.
Apigee Edge 문서 보기
이 주제에서는 ResponseCache 정책을 사용할 때 Apigee가 HTTP/1.1 캐싱 헤더를 처리하는 방법을 설명합니다. Apigee는 현재 백엔드 대상(원본) 서버에서 수신한 HTTP/1.1 캐싱 헤더 및 지시문의 하위 집합(이 주제에 나열된 지원되지 않는 기능)을 지원합니다.
또한 특정 헤더에서는 Apigee가 지시문을 기반으로 작업을 수행합니다. 경우에 따라서는 ResponseCache 정책에 어떤 동작을 지정하든 이러한 HTTP/1.1 캐시 헤더가 이 동작을 재정의합니다.
예를 들어 백엔드 서버에서 Cache-Control
헤더가 반환되면 헤더의 s-maxage
지시문으로 정책의 다른 만료 설정을 재정의할 수 있습니다.
헤더 | 지원 |
---|---|
Cache-Control | 백엔드 원본 서버에서 반환되는 응답에 지원되며 클라이언트 요청에는 지원되지 않습니다. Apigee에서 지시문의 하위 집합을 지원합니다. |
만료 | 지원됨 재정의 가능. |
항목 태그(ETags) | If-Match 및 If-None-Match에 해당하는 특정 동작입니다. |
If-Modified-Since | GET 요청의 경우 유효한 캐시 항목이 존재하더라도 헤더가 원본 서버로 전달됩니다. |
Accept-Encoding | Apigee에서 수신 헤더에 따라 압축되거나 압축되지 않은 응답을 전송합니다. |
Cache-Control
Apigee는 백엔드 원본 서버에서 반환된 응답의 Cache-Control
헤더만 지원합니다. HTTP/1.1 사양에서는 클라이언트 요청과 원본 서버 응답 모두에 Cache-Control
헤더를 허용합니다. 원본 서버에는 Apigee API 프록시에 정의된 대상 엔드포인트와 TargetServer API 호출을 사용해 생성된 대상 엔드포인트가 모두 포함될 수 있습니다.
Cache-Control 지원 제한
Apigee에서 HTTP/1.1 사양에 정의된 Cache-Control
응답 헤더 기능의 하위 집합을 지원합니다. 다음에 유의하세요.
- Apigee는 인바운드 클라이언트 요청과 함께 수신되는
Cache-Control
헤더를 지원하지 않습니다. - Apigee는 공개 캐시 개념만 지원합니다. (HTTP 사양에 따라
Cache-Control
은 공개(공유) 또는 비공개(단일 사용자)일 수 있습니다.) - Apigee는 HTTP/1.1 사양에서
Cache-Control
응답 지시문의 하위 집합만 지원합니다. 자세한 내용은 Cache-Control 응답 헤더 지시문 지원을 참조하세요.
Cache-Control 응답 헤더 지시문 지원
Apigee에서 원본 서버의 응답에 HTTP/1.1 사양의 하위 집합 지시문을 지원합니다. 다음 표에서는 HTTP Cache-Control 응답 헤더 지시문에 대한 Apigee 지원을 설명합니다.
여기 나열된 지시문에 대한 자세한 내용은 HTTP/1.1 사양의 Cache-Control을 참조하세요.
Cache-Control 지시문 | Apigee에서 지시문을 처리하는 방법 |
cache-extension |
지원되지 않음 |
max-age |
ResponseCache 정책이 이 지시문은 |
must-revalidate |
지원되지 않음 모든 캐시 항목은 만료되는 즉시 Apigee에서 삭제됩니다. |
no-cache |
Apigee는 원본 응답을 캐시하지만 후속 클라이언트 요청을 충족하는 데 사용되기 전에 원본 서버로 다시 검증해야 합니다. 이 규칙은 원본이 캐시로부터 반환되어야 함을 나타내기 위해 원본에서 304 Not Modified 응답을 반환하므로 전체 응답을 반환하는 데 필요한 처리를 저장합니다. 원본 서버가 전체 응답을 반환하면 기존 캐시 항목을 대체합니다. 이 지시문으로 지정된 모든 필드 이름은 무시됩니다. |
no-store |
지원되지 않음 |
no-transform |
지원되지 않음 |
private |
지원되지 않음 이 지시문이 수신되면 원본 응답은 캐시되지 않습니다. 모든 필드 이름은 무시됩니다. |
proxy-revalidate |
지원되지 않음 모든 캐시 항목은 만료되는 즉시 Apigee에서 삭제됩니다. |
public |
다른 지시문에서 다르게 표시하더라도 Apigee에서 원본 응답을 캐시합니다. HTTP/1.1 사양에 따라 응답에 승인 헤더가 포함된 경우만이 이 규칙의 유일한 예외입니다. |
s-maxage |
ResponseCache 정책이 이 지시문은 |
만료
ResponseCache 정책의 UseResponseCacheHeaders
플래그를 true
로 설정하면 Apigee는 Expires
헤더를 사용하여 캐시된 항목의 TTL(수명)을 결정할 수 있습니다. 이 헤더는 응답의 캐시 항목이 오래된 것으로 간주되는 날짜/시간을 지정합니다. 이 헤더를 사용하면 타임스탬프를 토대로 캐시된 값을 반환할 수 있는 경우 서버에서 신호를 보내도록 할 수 있습니다.
Expires
헤더에 허용되는 날짜 형식은 HTTP/1.1 사양에 설명되어 있습니다. 예를 들면 다음과 같습니다.
만료: Thu, 01 Dec 1994 16:00:00 GMT
HTTP 날짜/시간 형식에 대한 자세한 내용은 HTTP/1.1 사양의 날짜/시간 형식을 참조하세요.
Expires
헤더에 대한 자세한 내용은 HTTP/1.1 사양의 헤더 필드 정의를 참조하세요.
ETag
항목 태그(ETag)는 요청된 리소스와 연결된 식별자입니다. ETag를 사용하면 서버는 요청된 리소스와 관련 캐시된 리소스가 일치하는지 확인할 수 있습니다. 예를 들어 현재 캐시된 항목과 일치하지 않는 경우 서버가 응답을 다시 캐시할 수 있습니다. ETag가 일치하면 캐시된 리소스를 반환할 수 있습니다.
대상 엔드포인트가 ETag를 사용하여 Apigee에 응답을 다시 보내면 Apigee는 응답과 함께 ETag를 캐시합니다.
HTTP/1.1 사양의 프로토콜 매개변수에서 항목 태그에 대한 자세한 내용을 확인할 수 있습니다.
If-Match
If-Match
요청 헤더는 헤더의 ETag가 캐시된 ETag와 일치하는 경우 캐시된 항목이 최신 항목입니다. If-Match
헤더를 지정하는 GET 외의 요청은 모든 원본 캐싱 기능이 요청을 처리할 수 있도록 원본 서버로 전달됩니다.
If-Match
에 대한 자세한 내용은 HTTP/1.1 사양의 헤더 필드 정의를 참조하세요.
Apigee에서 If-Match
헤더를 포함하는 클라이언트로부터 인바운드 GET 요청을 받는 경우:
If | Then |
---|---|
If-Match 헤더는 하나 이상의 ETag를 지정합니다. |
|
If-Match 헤더는 '*'를 지정합니다. |
요청이 원본 서버로 전달되어 모든 원본 캐싱 기능이 요청을 처리할 수 있도록 합니다. |
동일한 요청 URI를 사용하는 캐시 항목이 발견되었지만 약한 ETag만 포함되어 있습니다. | 항목을 클라이언트에 반환하기 전에 원래 서버에서 유효성을 다시 검증해야 합니다. |
ETag는 원본 서버에서 가져옵니다. | ETag가 클라이언트에 변경되지 않은 상태로 반환됩니다. |
If-None-Match
If-None-Match
헤더는 헤더의 ETag가 캐시된 ETag와 일치하지 않는 경우 캐시된 항목이 최신 항목입니다. 이 헤더를 포함하는 GET 외의 요청은 원본 서버로 전달됩니다.
Apigee에서 이 헤더와 함께 인바운드 GET 요청을 수신하는 경우:
If | Then |
---|---|
If-None-Match 헤더는 하나 이상의 ETag를 지정합니다. |
|
|
Apigee에서 304 Not Modified 상태를 반환합니다. |
동일한 요청 URI를 사용하는 캐시 항목이 발견되었지만 약한 ETag만 포함되어 있습니다. | Apigee가 항목을 클라이언트에 반환하기 전에 원본 서버에서 항목을 다시 검증해야 합니다. |
Apigee가 원본 서버에서 ETag를 수신합니다. | ETag가 클라이언트에 변경되지 않은 상태로 반환됩니다. |
If-Modified-Since
Apigee가 GET 요청으로 If-Modified-Since
헤더를 수신하면 유효한 캐시 항목이 존재하더라도 원본 서버로 전달됩니다.
이로써 Apigee를 통해 전달되지 않은 리소스에 대한 모든 업데이트가 반영됩니다. 원본 서버가 새 항목을 반환하면 Apigee에서 기존 캐시 항목을 새 값으로 바꿉니다. 서버가 304 Not Modified 상태를 반환하는 경우 캐시된 응답의 Last-Modified
헤더에서 변경되지 않았다고 표시되면 Apigee가 응답 값을 반환합니다.
Accept-Encoding
수신된 요청에 gzip
, deflate
또는 compress
값이 있는 Accept-Encoding
헤더가 포함되면 원본 서버에서 압축된 데이터로 응답합니다. 후속 요청이 Accept-Encoding
헤더 없이 수신되면 압축되지 않은 응답이 반환될 것으로 예상됩니다. Apigee의 응답 캐싱 메커니즘에서는 원본 서버로 돌아가지 않고도 수신 헤더에 따라 압축된 응답과 압축되지 않은 응답 모두를 전송할 수 있습니다.
캐시 키에 Accept 헤더 값을 추가하여 캐시된 각 항목에 키를 더 의미 있게 만들 수 있습니다. 자세한 내용은 응답 캐시 정책의 '캐시 키 구성'을 참조하세요.