캐시 제어를위한 강력하고 빠른 규칙은 무엇입니까?


15

고백 : 유지 관리하는 사이트는 주로 서버의 기본 구성과 페이지 속도Y-Slow Firefox 플러그인 및 Google Speed ​​Tracer 의 네트워크 리소스보기의 권장 사항에 따라 다른 캐시 제어 규칙을 갖습니다 . Cache-Control은 수행하려는 작업에 따라 개인 / 공개로 설정되며, ETag / Last-Modified 헤더는 Y-Slow가 잘못된 것을 제안하고 Amazon의 파일을 수동으로 gzip으로 압축 할 때 Vary-Accept-Encoding이 필요한 경우에만 땜질됩니다 CloudFront.

다양한 옵션에 대한 자료와 그 내용을 읽을 때 충돌하는 정보, 깨진 프록시 규칙 및 화물 컬트 구성에 대한 규칙이있는 것 같습니다 . 위에서 언급 한 분석 도구가 제공하는 공식 정보는 통일 된 전략이 아닌 개별 주제를 개별적으로 다루기 때문에 접근하기가 어렵습니다 (따라서 기술에 대한 상호 참조는 없습니다).

예를 들어, 속도 분석 도구가 ETag가있는 사이트를 캐싱에 도움이되는 사이트가없는 사이트와 동일하게 평가하는 것은 말이되지 않습니다.

플랫폼에 무관 한 캐시 제어 전략을위한 강력하고 빠른 규칙은 무엇입니까?

편집하다:

링크 를 통해 제프 앳 우드의 기사는 뛰어난 깊이 캐싱을 설명합니다.

기록을 위해 여기에 어렵고 빠른 규칙이 있습니다.

파일이 GZIP 등을 사용하여 압축 된 경우 - "cache-control : private"을 사용하여 프록시가 압축 된 버전을 지원하지 않는 클라이언트로 압축 버전을 리턴 할 수 있습니다 (브라우저 캐시는이 방법으로 표시된 파일을 보유합니다). 또한 압축 가능하다고 말하는 "Vary : Accept-Encoding"을 포함해야합니다.

ETag와 함께 Last-Modified를 사용하십시오. 벨트 및 괄호 사용법은 두 유효성 검사기를 모두 제공하는 반면, ETag는 수정 시간 대신 파일 내용을 기반으로하며, 모든베이스를 모두 사용합니다. 참고 : AOL의 PageTest 에는 어떤 이유로 ETag에 대한 고유 한 접근 방식이 있습니다. 둘 이상의 서버에서 Apache를 사용하여 동일한 컨텐츠를 호스팅하는 경우 동일한 라이브 파일 시스템을 사용하지 않는 한 FileETag 지시문 (예 : "FileETag MTime Size")에서 제외하여 ETag에서 암시 적으로 선언 된 inode를 제거하십시오.

가능하면 "캐시 제어 : 공개"를 사용하십시오. 즉, 페이지의 나머지 부분에 HTTP 인증 등이 필요한 경우에도 프록시 서버 (및 브라우저 캐시)가 콘텐츠를 반환합니다.

답변:


8

먼저 서버 팜 / 클러스터를 사용하지 않는 한 Yahoo와 같이 ETag를 제거하지 마십시오. 변경되지 않은 동일한 파일이 항상 동일한 ETag를 반환하는 한 매우 유용한 지시어입니다.

다른 헤더와 관련하여 Yahoo의 모범 사례Expires정적 파일에 대한 훨씬 미래의 헤더 를 설정하고 Cache-Control동적 컨텐츠에 사용하도록 제안 합니다. 그러나 Cache-control정적 콘텐츠에는 완벽하게 적합합니다 (그들 사이에는 거의 차이가 없습니다).

캐시 된 정적 파일을 변경할 때는 파일 이름을 변경하거나 끝에 고유 한 매개 변수를 추가해야합니다 (예 :) example.com/styles.css?v=2. 아래 주석에서 언급했듯이 실제 파일 이름을 변경하는 것이 좋습니다.

또한 원하는대로 YSlow 규칙을 편집하여 Etag 규칙을 제거하고 고유 한 도메인을 CDN으로 추가 할 수 있습니다. 이 기사는 또한 잘 읽습니다 : 야후의 문제는 당신의 문제가 아닙니다


ETag는 아파치에서 Y-Slow의 inode (FS에 따라 신뢰할 수없는)를 포함하는 기본값 대신 "FileETag MTime Size"를 수행함으로써 의미가 있습니다. 그러나 Yahoo의 모범 사례에 대한 권장 사항은 Page Speed와 비교할 때 약간 혼동됩니다. 예를 들어 동적 페이지에서만 Cache-Control을 사용한다고 말하지만 (정확한 CSS의 경우 Cache-Control : public, 수동의 GZipped Amazon Cloudfront 파일의 경우 Cache-Control : private)을 사용하는 것이 좋습니다.
메탈 샤크

프록시에 대한 조언을 어떻게해야하는지 알기가 어렵습니다. 구글은 "일부 공개 프록시에는 버그가있다"고하지만, 이것이 얼마나 널리 퍼져 있는지는 밝히지 않았다. 헤더를 설정하는 Vary: Accept-Encoding것이 좋습니다. code.google.com/speed/page-speed/docs/caching.html
DisgruntledGoat

쿼리 매개 변수를 추가하면 일부 브라우저에서 해당 파일을 완전히 캐싱 할 수 없습니다. 따라서 "파일 이름 변경"접근 방식을 사용하는 것이 좋습니다.example.com/style_v2.css
Evgeny

@Evgeny : 어떤 브라우저? 나는 전에 이것을 들었지만 실제로 파일을 캐시하지 않는 브라우저를 본 적이 없다 (특히 올바른 헤더가있는 경우).
DisgruntledGoat

@DisgruntledGoat 실제로, 일부 파기 후에는 실제로 사용자 에이전트가 쿼리 문자열이있는 자산을 캐시해서는 안된다고 말한 사양의 일부였던 http / 1.0 시대의 유물 인 것 같습니다. 반면 code.google.com/speed/page-speed/docs/caching.html 은 애셋을 캐시하지 않으므로 캐시 버스 팅에 쿼리 문자열을 사용하는 것이 프록시 (오징어 <3.0)라고 권장하지 않습니다.
Evgeny 2012 년

0

캐싱을 사용하도록 리소스의 요청 헤더 변경 대부분의 사람들에게 캐싱을 가능하게하는 방법은 웹 호스트 / 서버의 .htaccess 파일에 코드를 추가하는 것입니다.

이는 웹 호스트에서 파일 관리자 (또는 파일을 추가하거나 업로드 할 때마다)로 이동한다는 의미입니다.

.htaccess 파일은 사이트의 여러 가지 중요한 사항을 제어합니다. .htaccess 파일에 익숙하지 않다면 .htaccess로 작업 한 기사를 읽고 변경하기 전에 방법을 알아보십시오.

아래 코드는 브라우저에게 캐시 할 내용과 "기억하는 시간"을 알려줍니다. .htaccess 파일 맨 위에 추가해야합니다.

## EXPIRES CACHING ##
<IfModule mod_expires.c>
ExpiresActive On
ExpiresByType image/jpg "access 1 year"
ExpiresByType image/jpeg "access 1 year"
ExpiresByType image/gif "access 1 year"
ExpiresByType image/png "access 1 year"
ExpiresByType text/css "access 1 month"
ExpiresByType text/html "access 1 month"
ExpiresByType application/pdf "access 1 month"
ExpiresByType text/x-javascript "access 1 month"
ExpiresByType application/x-shockwave-flash "access 1 month"
ExpiresByType image/x-icon "access 1 year"
ExpiresDefault "access 1 month"
</IfModule>
## EXPIRES CACHING ##

.htaccess 파일을 저장 한 다음 웹 페이지를 새로 고치십시오.

출처 :
https://varvy.com/pagespeed/leverage-browser-caching.html


ExpiresByType내가 본 지시문의 거의 모든 예 에는 mime 유형이 포함되어 있습니다. text/x-javascript귀하의 서버가이 컨텐츠 유형으로 실제로 응답 합니까 ?! (맹인 복사 / 붙여 넣기 IMO의 예)
MrWhite
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.