CloudFront에서 객체에 대한 부분적인 요청을 처리하는 방법(범위 GET) - Amazon CloudFront

CloudFront에서 객체에 대한 부분적인 요청을 처리하는 방법(범위 GET)

대용량 객체의 경우 최종 사용자의 브라우저 또는 클라이언트에서 여러 GET 요청을 만들고 Range 요청 헤더를 사용하여 더 작은 단위로 객체를 다운로드할 수 있습니다. Range GET 요청이라고도 하는 이러한 바이트 범위의 요청을 통해 부분 다운로드의 효율을 높이고 부분적으로 실패한 전송을 쉽게 복구할 수 있습니다.

CloudFront에서 Range GET 요청을 받은 경우, 요청을 받은 엣지 로케이션에서 캐시를 확인합니다. 엣지 로케이션의 캐시에 이미 전체 객체 또는 객체의 요청된 부분이 포함되어 있는 경우, CloudFront에서는 캐시로부터 요청된 범위를 즉시 제공합니다.

캐시에 요청된 범위가 포함되어 있지 않은 경우, CloudFront에서는 요청을 오리진에 전달합니다. (성능 최적화를 위해 CloudFront에서는 클라이언트가 Range GET에서 요청한 것보다 더 큰 범위를 요청할 수 있습니다.) 오리진에서 Range GET 요청을 지원하는지 여부에 따라 다음 상황이 달라집니다.

  • 오리진에서 Range GET 요청을 지원하는 경우: 요청된 범위를 반환합니다. CloudFront에서는 요청된 범위를 제공하고 이를 이후 요청을 위해 캐싱합니다. (Amazon S3는 Apache 및 IIS와 같은 일부 HTTP 서버와 마찬가지로 Range GET 요청을 지원합니다. 사용하는 HTTP 서버의 요청 지원 여부에 대한 자세한 내용은 해당 HTTP 서버 설명서를 참조하세요.

  • 오리진에서 Range GET 요청을 지원하지 않는 경우: 전체 객체를 반환합니다. CloudFront에서는 전체 객체를 전송하고 향후 요청을 위해 캐싱하여 현재 요청을 처리합니다. CloudFront에서 엣지 캐시에 전체 객체를 캐싱한 후에는 요청된 범위를 제공하여 새 Range GET 요청에 응답합니다.

두 경우 모두 오리진에서 첫 번째 바이트가 도착하면 CloudFront에서는 요청된 범위 또는 객체를 최종 사용자에게 제공하기 시작합니다.

참고

최종 사용자가 Range GET 요청을 하고 오리진이 Transfer-Encoding: chunked를 반환하는 경우, CloudFront에서는 요청한 범위 대신에 최종 사용자에 전체 객체를 반환합니다.

CloudFront에서는 일반적으로 Range 헤더에 대한 RFC 사양을 준수합니다. 그러나 Range 헤더가 다음 요구 사항을 준수하지 않는 경우, CloudFront에서는 지정된 범위와 함께 상태 코드 200을 반환하는 대신 전체 객체와 함께 HTTP 상태 코드 206을 반환합니다.

  • 범위는 오름차순으로 나열되어야 합니다. 예를 들어, 100-200,300-400은 유효하지만 300-400,100-200은 유효하지 않습니다.

  • 범위는 중복되어서는 안 됩니다. 예를 들어, 100-200,150-250은 유효하지 않습니다.

  • 모든 범위 사양은 유효해야 합니다. 예를 들어, 범위의 일부로 음수 값을 지정할 수 없습니다.

Range요청 헤더에 대한 자세한 내용은 http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.35에서 Hypertext Transfer Protocol -- HTTP/1.1의 "섹션 14.35 Range"를 참조하십시오.