YOGAE

TODO: FIXME:

CloudFront gzip 설정

12 Apr 2019

gzip 설정을 위한 request Header

  • request: Accept-Encoding(browser에서 자동으로 설정, custom하게 설정 불가능)
  • response: Content-Encoding

CloudFront에서 gzip 설정

최종 사용자 요청이 요청 헤더에 Accept-Encoding: gzip을 포함하는 경우 특정 유형의 파일을 자동으로 압축하고 압축된 파일을 제공하도록 CloudFront를 구성할 수 있습니다. 오리진이 CloudFront에 압축된 파일을 반환하는 경우, CloudFront는 Content-Encoding헤더의 값을 기반으로 파일이 압축되었음을 감지하고 파일을 다시 압축하지 않습니다.

압축된 파일이 이미 캐시에 있는 경우, CloudFront는 최종 사용자에 파일을 반환하고 나머지 단계를 건너뜁니다. 압축된 파일이 캐시에 없는 경우, CloudFront는 오리진 서버에 요청을 전달됩니다.(CloudFront가 캐시에 압축되지 않은 버전의 파일이 있는 경우에도 오리진에 요청을 전달합니다.)

origin에서 들어온 response에 대하여 cloudfront가 압축을 하는 조건은 아래와 같습니다.

  • 파일은 CloudFront가 압축하는 유형이어야 합니다.
  • 파일 크기는 1,000 ~ 10,000,000바이트 사이여야 합니다.
  • 응답에는 Content-Length 헤더가 포함되어 있어 CloudFront에서 파일의 크기가 CloudFront가 압축하는 범위에 있는지 확인할 수 있도록 해야 합니다. Content-Length 헤더가 빠진 경우, CloudFront는 파일을 압축하지 않습니다.
  • 응답에 Content-Encoding 헤더가 포함되어서는 안 됩니다.

요청에 Accept-Encoding: gzip이 포함되지 않는 경우

요청에 Accept-Encoding 헤더가 빠져 있는 경우, CloudFront는 압축되지 않은 콘텐츠를 제공합니다. Accept-Encoding 헤더에 deflate 또는 sdch와 같은 추가 값이 포함된 경우, CloudFront 에서는 오리진 서버에 요청을 전달하기 전에 이를 제거합니다.

Reference

  • s3 origin: https://www.thepolyglotdeveloper.com/2018/10/serving-gzipped-javascript-files-amazon-s3/