압축된 파일 제공 - 아마존 CloudFront

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

압축된 파일 제공

를 CloudFront 사용하여 뷰어 (웹 브라우저 또는 기타 클라이언트) 가 지원하는 경우 특정 유형의 개체 (파일) 를 자동으로 압축하고 압축된 개체를 제공할 수 있습니다. 뷰어는 Accept-Encoding HTTP 헤더를 사용하여 이러한 압축 객체에 대한 지원을 나타냅니다.

CloudFront Gzip 및 Brotli 압축 형식을 사용하여 개체를 압축할 수 있습니다. 뷰어가 두 형식을 모두 지원하고 연결된 캐시 서버에 두 형식이 모두 있는 경우 Brotli를 선호합니다. CloudFront 캐시 서버에 압축 형식이 하나만 있는 경우 해당 압축 형식을 반환합니다. CloudFront

참고

Chrome 및 Firefox 웹 브라우저는 HTTPS를 사용하여 요청이 전송될 때만 Brotli 압축을 지원합니다. 이러한 브라우저는 HTTP 요청이 있는 Brotli를 지원하지 않습니다.

객체가 압축되면 객체 크기가 더 작아지므로 다운로드 속도가 빨라집니다. 원래 크기의 1/4 이하로 줄어드는 경우도 있습니다. 특히 CSS 파일의 경우 JavaScript 다운로드 속도가 빠르면 사용자가 웹 페이지를 더 빨리 렌더링할 수 있습니다. 또한 CloudFront 데이터 전송 비용은 제공된 총 데이터 양을 기준으로 하므로 압축된 객체를 제공하는 것이 압축되지 않은 상태로 제공하는 것보다 저렴할 수 있습니다.

일부 사용자 지정 오리진도 객체를 압축할 수 있습니다. 오리진에서는 CloudFront 압축되지 않는 객체를 압축할 수 있습니다 (참조). CloudFront가 압축하는 파일 유형 오리진에서 압축된 객체를 에 반환하는 CloudFront 경우 Content-Encoding 헤더의 존재 여부에 따라 객체가 압축된 것을 CloudFront 감지하고 객체를 다시 압축하지 않습니다.

객체를 CloudFront 압축하도록 구성

객체를 CloudFront 압축하도록 구성하려면 다음을 모두 수행하여 압축된 객체에 제공하려는 캐시 동작을 업데이트하십시오.

  1. 자동으로 객체 압축 설정이 로 설정되어 있는지 확인합니다. (AWS CloudFormationIn 또는 CloudFront API, Compresstrue 설정)

  2. 캐시 정책을 사용하여 캐싱 설정을 지정하고 GzipBrotli 설정이 모두 활성화되어 있는지 확인합니다. (AWS CloudFormation 또는 CloudFront API에서 EnableAcceptEncodingGzipEnableAcceptEncodingBrotlitrue로 설정합니다.)

  3. 캐시 정책의 TTL 값이 0보다 큰 값으로 설정되어 있는지 확인합니다. TTL 값을 0으로 설정하면 캐싱이 비활성화되고 객체가 CloudFront 압축되지 않습니다.

캐시 동작을 업데이트하려면 다음 도구 중 하나를 사용할 수 있습니다.

CloudFront 압축 작동 방식

객체를 CloudFront 압축하도록 구성하는 경우 (이전 섹션 참조) 작동 방식은 다음과 같습니다.

  1. 뷰어가 객체를 요청하는 경우 뷰어는 요청에 Accept-Encoding HTTP 헤더를 포함하며 헤더 값에는 gzip, br 또는 둘 다 포함됩니다. 이는 뷰어가 압축된 객체를 지원함을 의미합니다. 뷰어가 Gzip과 Brotli를 모두 지원하는 경우 Brotli를 선호합니다. CloudFront

    참고

    Chrome 및 Firefox 웹 브라우저는 HTTPS를 사용하여 요청이 전송될 때만 Brotli 압축을 지원합니다. 이러한 브라우저는 HTTP 요청이 있는 Brotli를 지원하지 않습니다.

  2. 엣지 로케이션에서 요청된 객체의 압축된 사본이 있는지 캐시를 CloudFront 확인합니다.

  3. 압축된 개체가 이미 캐시에 있는 경우 최종 CloudFront 사용자에게 전송하고 나머지 단계는 건너뛰십시오.

    압축된 객체가 캐시에 없는 경우 요청을 오리진에 CloudFront 전달합니다.

    참고

    객체의 압축되지 않은 사본이 이미 캐시에 있는 경우 요청을 오리진에 전달하지 않고 최종 사용자에게 전송할 CloudFront 수 있습니다. 예를 들어 CloudFront 이전에 압축을 건너뛰었을 때 이런 일이 발생할 수 있습니다. 이 경우 압축되지 않은 객체를 CloudFront 캐싱하고 객체가 만료되거나 제거되거나 무효화될 때까지 계속 제공합니다.

  4. 오리진에서 압축된 객체를 반환하면 (HTTP 응답에 Content-Encoding 헤더가 있는 것으로 표시됨) 압축된 객체를 뷰어로 CloudFront 보내고 캐시에 추가한 다음 나머지 단계를 건너뛰게 됩니다. CloudFront 객체를 다시 압축하지 않습니다.

    오리진이 CloudFront (HTTP 응답에 Content-Encoding 헤더가 없음) 에 압축되지 않은 객체를 반환하는 경우 해당 객체의 압축 가능 여부를 CloudFront 결정합니다. 객체의 압축 가능 여부를 CloudFront 결정하는 방법에 대한 자세한 내용은 다음 섹션을 참조하십시오.

  5. 객체가 압축 가능한 경우 객체를 CloudFront 압축하여 뷰어로 보내고 캐시에 추가합니다. (드문 경우이긴 하지만 압축을 건너뛰고 압축되지 않은 객체를 뷰어로 보낼 CloudFront 수도 있습니다.)

압축에 대한 참고 사항 CloudFront

다음 목록은 객체를 CloudFront 압축하는 경우에 대한 자세한 정보를 제공합니다.

요청에는 HTTP 1.0을 사용합니다

HTTP 1.0을 CloudFront 사용하도록 요청하면 Accept-Encoding 헤더가 CloudFront 제거되고 응답에서 객체가 압축되지 않습니다.

Accept-Encoding 요청 헤더

최종 사용자 요청에 헤더가 없거나 Accept-Encoding 헤더에 또는 값이 포함되지 gzip 않은 경우 응답에서 객체를 압축하지 CloudFront 않습니다. br Accept-Encoding헤더에 와 같은 deflate 추가 값이 포함된 경우 요청을 오리진에 전달하기 전에 해당 값을 CloudFront 제거합니다.

객체를 압축하도록 구성된 경우 캐시 키와 원본 요청에 Accept-Encoding 헤더가 자동으로 포함됩니다. CloudFront

동적 콘텐츠

CloudFront 동적 콘텐츠를 항상 압축하지는 않습니다. 동적 콘텐츠에 대한 응답이 압축되는 경우도 있고 그렇지 않은 경우도 있습니다.

객체를 CloudFront 압축하도록 구성할 때 내용은 이미 캐시되어 있습니다.

CloudFront 오리진에서 객체를 가져오는 경우 객체를 압축합니다. 객체를 CloudFront 압축하도록 구성하면 엣지 로케이션에 이미 캐시된 객체는 압축하지 CloudFront 않습니다. 또한 캐시된 객체가 엣지 로케이션에서 만료되어 해당 객체에 대한 또 다른 요청을 오리진에 CloudFront 전달하는 경우 오리진에서 HTTP 상태 코드 304를 반환하면 객체를 압축하지 CloudFront 않습니다. 즉, 엣지 로케이션에 이미 최신 버전의 객체가 있습니다. 엣지 로케이션에 이미 캐시된 객체를 CloudFront 압축하려면 해당 객체를 무효화해야 합니다. 자세한 설명은 파일 무효화 섹션을 참조하세요.

오리진이 이미 객체를 압축하도록 구성된 경우

객체를 CloudFront 압축하도록 구성하고 오리진에서 객체도 압축하는 경우, 오리진에는 객체가 이미 압축되었음을 나타내는 Content-Encoding 헤더가 포함되어야 합니다. CloudFront 오리진의 응답에 Content-Encoding 헤더가 포함된 경우 헤더의 값에 관계없이 객체를 압축하지 CloudFront 않습니다. CloudFront 최종 사용자에게 응답을 보내고 엣지 로케이션에 객체를 캐싱합니다.

압축하는 CloudFront 파일 유형

CloudFront 압축되는 파일 유형의 전체 목록은 을 참조하십시오. CloudFront가 압축하는 파일 유형

압축하는 CloudFront 개체의 크기

CloudFront 크기가 1,000바이트에서 10,000,000바이트 사이인 객체를 압축합니다.

Content-Length 헤더

오리진에는 응답에 Content-Length 헤더가 포함되어야 합니다. 헤더는 객체 크기가 압축되는 범위에 속하는지 여부를 결정하는 데 CloudFront 사용됩니다. CloudFront Content-Length헤더가 없거나, 잘못된 값을 포함하거나, CloudFront 압축되는 크기 범위를 벗어나는 값을 포함하는 경우 오브젝트를 압축하지 CloudFront 않습니다.

응답의 HTTP 상태 코드

CloudFront 응답의 HTTP 상태 코드가200, 403 또는 인 경우에만 객체를 압축합니다. 404

응답에 본문 없음

오리진의 HTTP 응답에 본문이 없는 경우 CloudFront 압축할 수 있는 항목이 없습니다.

ETag 헤더

CloudFront 객체를 압축할 때 HTTP 응답의 ETag 헤더를 수정하는 경우가 있습니다. 자세한 설명은 ETag 헤더 변환 섹션을 참조하세요.

CloudFront 압축을 건너뛰습니다.

CloudFront 최선을 다해 개체를 압축합니다. 드문 경우이긴 하지만 압축을 CloudFront 건너뛰기도 합니다. CloudFront 호스트 용량을 비롯한 다양한 요인을 기반으로 결정을 내립니다. 객체 압축을 CloudFront 건너뛰면 압축되지 않은 객체를 캐싱하고 객체가 만료되거나 제거되거나 무효화될 때까지 뷰어에게 계속 제공합니다.

CloudFront가 압축하는 파일 유형

객체를 CloudFront 압축하도록 구성한 경우 응답 헤더에 다음 값 중 하나가 있는 CloudFront 객체만 압축합니다. Content-Type

  • application/dash+xml

  • application/eot

  • application/font

  • application/font-sfnt

  • application/javascript

  • application/json

  • application/opentype

  • application/otf

  • application/pdf

  • application/pkcs7-mime

  • application/protobuf

  • application/rss+xml

  • application/truetype

  • application/ttf

  • application/vnd.apple.mpegurl

  • application/vnd.mapbox-vector-tile

  • application/vnd.ms-fontobject

  • application/wasm

  • application/xhtml+xml

  • application/xml

  • application/x-font-opentype

  • application/x-font-truetype

  • application/x-font-ttf

  • application/x-httpd-cgi

  • application/x-javascript

  • application/x-mpegurl

  • application/x-opentype

  • application/x-otf

  • application/x-perl

  • application/x-ttf

  • font/eot

  • font/opentype

  • font/otf

  • font/ttf

  • image/svg+xml

  • text/css

  • text/csv

  • text/html

  • text/javascript

  • text/js

  • text/plain

  • text/richtext

  • text/tab-separated-values

  • text/xml

  • text/x-component

  • text/x-java-source

  • text/x-script

  • vnd.apple.mpegurl

ETag 헤더 변환

원본의 압축되지 않은 객체에 유효하고 강력한 ETag HTTP 헤더가 포함되어 있고 해당 객체를 CloudFront 압축하는 경우 CloudFront 도 강력한 ETag 헤더 값을 약한 헤더 값으로 변환하고 뷰어에게 약한 ETag 값을 반환합니다. ETag 최종 사용자는 취약한 ETag 값을 저장하고 이를 사용하여 If-None-Match HTTP 헤더가 있는 조건부 요청을 보낼 수 있습니다. 이를 통해 뷰어와 오리진은 객체의 압축된 버전과 압축되지 않은 버전을 의미상 동등한 것으로 취급하여 불필요한 데이터 전송을 줄일 수 있습니다. CloudFront

올바른 강력한 ETag 헤더 값은 큰따옴표(")로 시작합니다. 강한 ETag 값을 약한 값으로 변환하려면 강한 값의 시작 부분에 문자를 CloudFront W/ 추가합니다. ETag

오리진의 객체에 약한 ETag 헤더 값 (문자로 시작하는 값W/) 이 포함된 경우 이 값을 CloudFront 수정하지 않고 오리진에서 수신한 대로 뷰어에게 반환합니다.

오리진의 객체에 잘못된 ETag 헤더 값 (값이 로 " 또는 으로 시작하지 않음W/) 이 포함된 경우, 헤더를 CloudFront 제거하고 ETag 응답 ETag 헤더 없이 뷰어에게 객체를 반환합니다.

자세한 내용은 MDN 웹 문서의 다음 페이지를 참조하세요.