2011-08-15 3 views
45

내 웹 사이트의 정적 자산을 제공하는 데 Amazon S3를 사용하고 있습니다. 브라우저에 이러한 애셋을 가능한 한 오랫동안 캐시하고 싶습니다. 무엇 메타 데이터 헤더 것은 내 자산HTTP의 캐시 제어 헤더 최대 값

Cache-Control: max-age=??? 
+0

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

답변

63

일반적으로 1 년을 표준 최대 값으로 권고합니다. RFC 2616 참조 :로

응답을 표시하려면 "사용 기간 제한 없음"원 서버는 응답이 전송 있는 시간에서 약 일년 날짜를 만료 보냅니다. HTTP/1.1 서버는 Expires 날짜를 미래에 년 이상 보내야합니다 (SHOULD NOT). 그 이전 expires 표준에 적용되지만

, 그것은 의미가 너무 명시적인 표준 지침의 부재에 cache-control에 적용 할 수 있습니다. 어쨌든 일반적으로 필요하고 임의의 더 긴 값을 선택하는 것이 사용자 에이전트를 손상시킬 수있는 한 오래 걸립니다. 따라서 :

Cache-Control: max-age=31536000 
16

에 포함해야한다 "는 가능한 한 오랫동안,"대신만큼 합리적인에 대한 정착을 위해 그것을 저장하지 않는 것이 좋습니다. 예를 들어, 10 년 이상 오래 캐시 할 필요는 없습니다 ... 맞습니까?

은 RFC 여기에 최대 사용 기간에 대해 설명 : 최대 사용 기간 값을 (2^31) 2147483648 이상 : http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.9.3

에릭 로렌스는 IE9에 앞서, Internet Explorer에서 캐시 제어와 같은 오래된 모든 리소스를 치료하는 것을 말한다 초, 약 68 년 (http://blogs.msdn.com/b/ie/archive/2010/07/14/caching-improvements-in-internet-explorer-9.aspx).

다른 사용자 에이전트는 물론 다를 수 있으므로 ... 오버플로를 유발할 가능성이 낮은 (아닌 가능성이있는) 번호를 선택하십시오. 최대 연령은 31536000 (1 년)보다 크지 않으며 비공식적으로 합리적인 최대 값으로 간주됩니다.

+0

실제로 찾고 있습니다. 특정 헤더를 보낼 수 있습니다. 변경을하고 방문자에게 표시해야하는 경우 파일의 URL을 다른 파일 이름을 가리 키도록 변경하는 메커니즘이 내 웹 사이트에 내장되어 있습니다. 브라우저에 이러한 애셋을 무기한 캐시하려면 특정 헤더의 예가 필요합니다. –

+9

Cache-Control : max-age = 31536000은 1 년 동안 캐시합니다 (최대 권장). – EricLaw

+2

@ Geoffrey : 케이시가 짓고있는 것에 대해 당신이 혼란 스럽다고 생각합니다. 단순히 버전이 바뀌면 마크 업에서 참조하는 URL을 변경한다는 것입니다. 이것은 대부분의 상위 사이트에서 사용하는 모범 사례입니다. – EricLaw

1

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

우선, 방문자가 오래된 캐시 파일을 제공받는 경우 1 년 후에 갑자기 새 버전을로드하는 데 어떤 이점이 있습니까? 기능상의 관점에서 파일에 1 년 TTL이있는 경우 파일이 전혀 변경되지 않는 것을 의미합니다.

왜 1 년 이상이 필요합니까?

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

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

최대 1 년이 소요되는 요령은 무엇입니까? 어떤 브라우저가 31536000보다 높은 금액으로 숨 막힐 것입니까?

+3

1 년은 인터넷 시대의 영원한 해입니다. 덧붙여서, 캐싱을 심각하게 받아들이면 (캐시 ​​제어 외에) 마지막 수정 및/또는 etag 메커니즘을 처리 할 것입니다. 따라서 1 년 후에 재 요청해도 대역폭에 해를 끼치 지 않을 것입니다 (304 수정되지 않음). – redben

+0

이미지가 절대로 변경되지 않으면 1 년이 영원하지 않습니다 (인터넷의 대부분의 이미지처럼). 원본에서 파일을 새로 고치는 CDN (무의미한). last-modified/etag은 물론 클라이언트와 서버 간의 요청과 대화를 시작합니다. 우리가 이미 알고있는 것을 찾아 내기 위해 캐시 된 파일을 제공합니다. 당신의 주장은 기본적으로 "1 년은 인터넷에서의 영원함"이며, 이는 생산적으로 도움이되지 않습니다. 10 년이 지나면 이미지가 만료되며 더 나은 결과를 얻을 수 있습니다. – suncat100

+3

아, 기본 브라우저 캐시 크기도 있습니다. 캐시 된 자산은 브라우저 캐시에서 1 년 동안 생존합니까? 나는 모른다. – redben