HTTP에서 캐시 제어 헤더의 최대 값


80

내 웹 사이트에 정적 자산을 제공하기 위해 Amazon S3를 사용하고 있습니다. 가능한 한 오랫동안 브라우저가 이러한 자산을 캐시하도록하고 싶습니다. 자산에 어떤 메타 데이터 헤더를 포함해야합니까?

Cache-Control: max-age=???

가능한 최대 연령 값은 브라우저 / 버전 및 프록시에 따라 다릅니다 ... AFAIK 실제 표준 / 사양이 없으므로 어떤 값도 추측 일 수 있습니다 ...
Yahia

답변:


120

일반적으로 1 년이 표준 최대 값으로 권장됩니다. RFC 2616 참조 :

응답을 "만료되지 않음"으로 표시하기 위해 오리진 서버는 응답이 전송 된 후 약 1 년 후에 만료 날짜를 보냅니다. HTTP / 1.1 서버는 향후 1 년 이상 만료 날짜를 보내면 안됩니다.

이전 expires표준에 적용되지만 cache-control명시적인 표준 지침이없는 경우 에도 적용하는 것이 좋습니다 . 어쨌든 일반적으로 필요하고 임의로 더 긴 값을 선택하면 일부 사용자 에이전트가 손상 될 수 있습니다. 그래서:

Cache-Control: max-age=31536000

22

"가능한 한 오래"저장하지 말고 대신 합리적으로 오래 정착하십시오. 예를 들어, 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 년)보다 큰 것은 의미가 없으며 비공식적으로 이것은 합리적인 최대 값으로 간주됩니다.


실제로 보낼 특정 헤더를 찾고 있습니다. 내 웹 사이트에는 파일의 URL을 변경하여 방문자가 볼 수 있도록 다른 파일 이름을 가리 키도록하는 메커니즘이 있습니다. 브라우저가 이러한 자산을 무기한 캐시하도록하기 위해 보낼 특정 헤더의 예가 필요합니다.
Casey Flynn

12
Cache-Control : max-age = 31536000은 최대 권장 사항 인 1 년 동안 캐시합니다.
EricLaw

2
@Geoffrey : Casey가 무엇을 만들고 있는지 혼란스러워하는 것 같습니다. 그는 버전이 변경 될 때 마크 업에서 참조하는 URL을 변경하겠다고 말하고 있습니다. 이것은 대부분의 상위 사이트에서 사용하는 모범 사례입니다.
EricLaw 2011-08-16

@Geoffrey "2147483648 이상"이 확실합니까? "2147483647 이상"이라고 생각 했나요?
Pacerier

4

최대 1 년 캐싱 권장 사항을 만든 사람들은 제대로 생각하지 않았습니다.

우선, 방문자에게 오래된 캐시 파일이 제공되는 경우 1 년 후 갑자기 새 버전을로드하는 것이 왜 이점을 제공할까요? 파일에 1 년 TTL이있는 경우 기능적 관점에서 파일이 전혀 변경되지 않음을 의미합니다.

그렇다면 왜 1 년 이상이 필요할까요?

1) 왜 안됩니까? 방문자 브라우저에게 "이 파일은 1 년 된 파일입니다. 업데이트되었는지 확인하는 것이 좋습니다."라고 알리는 목적은 없습니다.

2) CDN 서비스. 대부분의 콘텐츠 전송 네트워크는 캐시 헤더를 사용하여 에지 서버에서 파일을 효율적으로 제공 할 기간을 결정합니다. 파일에 대해 1 년 캐시 제어 권한이있는 경우 어느 시점에서 원본 서버에서 변경되지 않은 파일을 다시 요청하기 시작하고 에지 캐시를 완전히 다시 채워야하므로 클라이언트로드가 느려지고 불필요합니다. 원점을 호출합니다.

최대 1 년의 포인트는 무엇입니까? 31536000보다 높게 설정된 금액으로 인해 어떤 브라우저가 질식할까요?


3
1 년은 인터넷 시대의 영원합니다. 또한 캐싱을 진지하게 생각한다면 마지막 수정 및 / 또는 etag 메커니즘을 (캐시 제어 외에도) 처리 할 것입니다. 따라서 1 년 후 다시 요청하는 경우에도 대역폭에 영향을주지 않습니다 (304 수정되지 않음)
redben 2015-04-20

2
이미지가 변경되지 않고 (인터넷에있는 대부분의 이미지처럼) CDN이 원본에서 파일을 새로 고치지 않으려는 경우 (무의미한) 1 년은 영원하지 않습니다. last-modified / etag에 관해서는 물론 클라이언트와 서버 간의 요청과 대화를 시작합니다. 우리가 이미 알고있는 "예, 캐시 된 파일을 제공해도 괜찮습니다". 당신의 주장은 기본적으로 "1 년은 인터넷에서 영원하다"이며, 이는 생산적인 것을 제공하지 않습니다. 저는 이미지에 대해 10 년 만료를 설정하여 더 나은 최종 결과를 제공합니다.
suncat100 2015

3
아 그리고 기본 브라우저 캐시 크기도 있습니다. 캐시 된 자산이 브라우저 캐시에서 1 년 동안 유지됩니까? 모르겠어요.
redben 2015-04-22

거의 불가능합니다. 항목을 "영원히"또는 "가능한 한 오래"캐시하는 것 외에 다른 목적이없는 경우 "1 년"설정의 무의미 함을 더욱 입증하는 것 ...
suncat100

브라우저 캐싱에 관한 것이 아닙니다. 여기에는 아카 마이와 니스 등 구글의 모바일 프록시를 캐싱 중간 프록시에 관한 것입니다
엘리야 린
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.