2012-07-20 3 views
0

그래서 제가 드루팔 (Drupal 웹 사이트에서 CSS 파일을 말하도록 수정하고 있습니다. 이 변경 사항은 내가 타겟팅 한 사이트의 해당 부분으로 이동할 때 Google 크롬에서 즉시 나타납니다. Firefox에서 사이트의 해당 부분으로 이동하면 이전에 방문한 이전 페이지가 표시됩니다. 물론 파이어 폭스를 수동으로 새로 고침하면이 문제가 해결됩니다.drupal 사이트의 firefox 캐시 문제

문제는 사용자가 페이지의 이전 버전을 볼 때 새로 고침 버튼을 누르는 것을 알지 못하고 깨진 것으로 가정합니다.

기본적으로 현재 페이지가 캐시되었는지 확인하고 php에서 캐시를 지우거나 더 세련된 접근 방식을 사용하도록 알려주는 방법이 있습니까?

답변

1

클라이언트가 PHP 또는 서버 환경에서 페이지를 캐시했는지 여부는 쉽게 알 수 없습니다. 그러나 캐시 할 것인지 또는 얼마나 오래 할 것인지에 대해 브라우저에 조언 할 수 있습니다. 이는 Cache-Control HTTP 헤더 (및 친구)를 설정하여 수행 할 수 있습니다. this page을 참조하십시오. 대부분의 사람들은 앞으로 몇 시간 동안 캐싱을 지정하는 경향이 있으므로 사용자는 오래된 데이터가 2 시간 이상 표시되지 않습니다. 이 방법을 권하고 싶지만 브라우저가 효율적으로 캐싱을 해제하도록 지시 할 수도 있습니다. 어쨌든, 제 생각에는 가장 간단한 해결책은 .htaccess 파일에이 헤더를 설정하는 것입니다.

여기에 2 시간 시간 제한 예입니다 :

# Cache CSS and JS files for up to 2 hours 
<FilesMatch "\.(css|js)$"> 
    <IfModule mod_headers.c> 
     # Set Max-age to 7200 seconds (2 hours), revalidate after 2 hours (ask the server if the file's changed) 
     Header set Cache-Control "max-age=7200, must-revalidate" 
    </IfModule> 
    FileETag MTime Size 
</FilesMatch> 

또 다른 옵션은 캐싱을 허용하지만, 아무것도 모든 요청에 ​​변경된 경우 서버를 요청하는 클라이언트를 강제하는 것입니다. 브라우저가 여전히 각 파일에 대해 서버에 왕복 요청을해야하므로 많은 css 및 js 파일 (일반적으로 드루팔 (Drupal)의 경우)을 제공하는 페이지에서 특히 큰 이점은 없습니다.

# Only use cache if checking with the server results in a 304 (Not Modified) 
<FilesMatch "\.(css|js)$"> 
    <IfModule mod_headers.c> 
     # Instruct the client and possibly proxies in front of the client to check for new versions every 0 seconds (always) 
     Header set Cache-Control "max-age=0, public, must-revalidate, proxy-revalidate" 
     # For older browsers 
     Header set Expires "Thu, 01 Jan 1970 00:00:00 GMT" 
    </IfModule> 
    FileETag MTime Size 
</FilesMatch> 

마지막으로 브라우저에서 캐싱을 사용하지 않도록 설정할 수 있습니다.

# Disable caching 
<FilesMatch "\.(css|js)$"> 
    <IfModule mod_headers.c> 
     Header set Cache-Control "no-store, no-cache, must-revalidate, proxy-revalidate, max-age=0" 
     # For older browsers 
     Header set Expires "Thu, 01 Jan 1970 00:00:00 GMT" 
    </IfModule> 
    FileETag MTime Size 
</FilesMatch> 
+0

이것은 내가 stackoverflow에서받은 최고의 답변입니다. 월요일에 먼저 시험해 보겠습니다. 고마워요! – prashn64

+0

이 작업이 시작되었지만 머리글에 최대 연령 표시를 새로 고침해야한다는 것을 알게되었습니다. .htaccess 파일을 FilesMatch에 추가해야합니까? – prashn64

+0

당신이 정확히 무엇을 말하고 있는지 이해한다면, 그렇게되어야합니다. 브라우저는 최대 연령 헤더 (및 파일)를 캐시하고 최대 사용 시간이 끝날 때까지 서버를 다시 확인하지 않습니다. 이전에 최대 연령을 설정하지 않았으므로 브라우저가 무한정 캐시되었으며 캐시를 지울 때까지 .htaccess에 대한 업데이트가 반영되지 않습니다. 말할 길이 멀다. 걱정 마라, 너는 바로하고있어! –

0

을 간단한 (비 드루팔) 솔루션의 당신이 뭔가 다른 스타일 메타 HREF의 이름을 바꿀 수 있습니다 : 당신이 파일은 매우 자주 변경 것이라고 확신 아니라면 페이지로드 시간이 나빠질 나는이 권하고 싶지 않다 . 예. 있는 style.css? 적이있는 드루팔를 들어

= 1.0 ...있는 style.css? 적이있는이 = 1.1 ...있는 style.css? 적이있는 = 1.1A ...는 등등 지우기 모든 캐시를 치는 버튼을 것입니다 위와 같이 스타일 시트 참조의 이름을 바꿉니다. (config/development/performance)

관련 문제