내 웹 사이트에 정적 자산을 제공하기 위해 Amazon S3를 사용하고 있습니다. 가능한 한 오랫동안 브라우저가 이러한 자산을 캐시하도록하고 싶습니다. 자산에 어떤 메타 데이터 헤더를 포함해야합니까?
Cache-Control: max-age=???
답변:
일반적으로 1 년이 표준 최대 값으로 권장됩니다. RFC 2616 참조 :
응답을 "만료되지 않음"으로 표시하기 위해 오리진 서버는 응답이 전송 된 후 약 1 년 후에 만료 날짜를 보냅니다. HTTP / 1.1 서버는 향후 1 년 이상 만료 날짜를 보내면 안됩니다.
이전 expires
표준에 적용되지만 cache-control
명시적인 표준 지침이없는 경우 에도 적용하는 것이 좋습니다 . 어쨌든 일반적으로 필요하고 임의로 더 긴 값을 선택하면 일부 사용자 에이전트가 손상 될 수 있습니다. 그래서:
Cache-Control: max-age=31536000
"가능한 한 오래"저장하지 말고 대신 합리적으로 오래 정착하십시오. 예를 들어, 10 년 이상 캐시 할 필요가 없을 것 같습니다 ... 맞습니까?
RFC는 여기에서 max-age에 대해 설명합니다. http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.9.3
Eric Lawrence는 IE9 이전에는 Internet Explorer가 Cache-Control : max-age 값이 2147483648 (2 ^ 31) 초 이상, 약 68 년 ( http://blogs.msdn.com/b /ie/archive/2010/07/14/caching-improvements-in-internet-explorer-9.aspx ).
물론 다른 사용자 에이전트는 다양하므로 오버플로를 유발할 가능성이없는 숫자를 선택하십시오. 최대 연령이 31536000 (1 년)보다 큰 것은 의미가 없으며 비공식적으로 이것은 합리적인 최대 값으로 간주됩니다.
최대 1 년 캐싱 권장 사항을 만든 사람들은 제대로 생각하지 않았습니다.
우선, 방문자에게 오래된 캐시 파일이 제공되는 경우 1 년 후 갑자기 새 버전을로드하는 것이 왜 이점을 제공할까요? 파일에 1 년 TTL이있는 경우 기능적 관점에서 파일이 전혀 변경되지 않음을 의미합니다.
그렇다면 왜 1 년 이상이 필요할까요?
1) 왜 안됩니까? 방문자 브라우저에게 "이 파일은 1 년 된 파일입니다. 업데이트되었는지 확인하는 것이 좋습니다."라고 알리는 목적은 없습니다.
2) CDN 서비스. 대부분의 콘텐츠 전송 네트워크는 캐시 헤더를 사용하여 에지 서버에서 파일을 효율적으로 제공 할 기간을 결정합니다. 파일에 대해 1 년 캐시 제어 권한이있는 경우 어느 시점에서 원본 서버에서 변경되지 않은 파일을 다시 요청하기 시작하고 에지 캐시를 완전히 다시 채워야하므로 클라이언트로드가 느려지고 불필요합니다. 원점을 호출합니다.
최대 1 년의 포인트는 무엇입니까? 31536000보다 높게 설정된 금액으로 인해 어떤 브라우저가 질식할까요?