Apache httpd (MAMP)에서 http 파일 캐싱을 방지하는 방법


139

MAMP에서 단일 페이지 Javascript 응용 프로그램을 개발 중입니다. 내 JavaScript 및 HTML 템플릿 파일이 요청간에 캐시됩니다.

http 파일 캐싱을 방지하고 싶다고 MAMP에 표시하는 간단한 방법이 있습니까? 아마도와 .htaccess파일? .htaccessMac에서 MAMP 용 가상 호스트를 어디에 배치 하거나 수정합니까?

답변:


318

이것을 시도? 모두에서 작동합니다 .htaccess, httpd.conf하고의 VirtualHost(보통 배치에 httpd-vhosts.conf당신이에서를 포함 한 경우의 httpd.conf)

<filesMatch "\.(html|htm|js|css)$">
  FileETag None
  <ifModule mod_headers.c>
     Header unset ETag
     Header set Cache-Control "max-age=0, no-cache, no-store, must-revalidate"
     Header set Pragma "no-cache"
     Header set Expires "Wed, 11 Jan 1984 05:00:00 GMT"
  </ifModule>
</filesMatch>

100 % 파일 캐시 방지

이는 프록시 및 클라이언트가 광고를 캐싱하는 것을 방지하기 위해 Google 광고가 Cache-Control : private, x-gzip-ok = ""> 헤더를 사용하는 방식과 유사합니다.

에서 http://www.askapache.com/htaccess/using-http-headers-with-htaccess.html

또한 선택적으로 확장자가 아닌 다른 확장자를 사용하는 경우 검색중인 템플리트 파일의 확장자를 추가하십시오 .html.


2
감사합니다.이 파일은 .htaccess 파일에서 매우 잘 작동합니다. 헤더를 검사 할 때 캐시 제어 옵션을 볼 수 있으며 요청 사이에 304가 아닌 http 200으로 파일이 표시됩니다. 필요한 것입니다.
dmck

2
LoadModule 명령을 추가하는 것을 잊지 마십시오. LoadModule headers_module lib/modules/mod_headers.so
Spenhouet

확장명을 하나씩 정의하지 않고 모든 파일 형식에 해당 헤더를 적용 할 수 있습니까?
Thariq Nugrohotomo

1
@ThariqNugrohotomo 네 가능합니다! 그것은 일반적인 표현입니다, <filesMatch "\.+">또는 시도해보십시오<filesMatch ^>
Charlie Rudenstål

웹 서버에서 MAMP가 아닌 Apache를 사용하고 있습니다. 또한 "sudo a2enmod headers"및 "sudo a2enmod expires"를 입력하여 Apache 설치에서 헤더를 활성화하고 모듈을 만료시킨 다음 sudo service apache2 restart를 수행해야했습니다. LoadModule 및 IfModule 명령 / 태그는 필요하지 않았습니다. 위의 괄호로 묶인 IfModule 태그 부분을 생략하고 여전히 그 사이에 헤더 설정을 입력하십시오. –
andruo11

5

여기 예제를 기반으로 : http://drupal.org/node/550488

다음은 아마 .htaccess에서 작동합니다.

 <IfModule mod_expires.c>
   # Enable expirations.
   ExpiresActive On

   # Cache all files for 2 weeks after access (A).
   ExpiresDefault A1209600

  <FilesMatch (\.js|\.html)$>
     ExpiresActive Off
  </FilesMatch>
 </IfModule>

불행히도 프로젝트 디렉토리에 .htaccess 파일을 넣을 때 작동하지 않습니다. mod_expires가 활성화되어 있는지 확실하지 않습니다.
dmck

5
@dmck : <IfModule mod_expires.c>and </IfModule>section을 제거 하십시오. mod_expires를 사용하지 않으면 해당 지시문 대신 자동으로 오류가 발생합니다.
Stennie

프로젝트 디렉토리에서 약간의 구문 오류가 발생하면 500 오류가 발생할 수 있습니다.
SDsolar

3

같은 문제가 있었지만 여기서 좋은 해결책을 찾았 습니다 .MAMP에서 PHP 5.5.3의 캐싱 중지

기본적으로 php.ini 파일을 찾아 OPCache 라인을 주석 처리하십시오. 이 대안 적 답변이 다른 사람들에게도 도움이되기를 바랍니다.


3
그것은 서버 측의 PHP 캐싱, 일명 OPCache에 관한 것입니다. 문제는 HTTP를 통해 요청 된 브라우저에서 파일을 캐시하는 것에 관한 것입니다.
Flion

2

mod_expires없으면 파일에 만료 헤더를 설정하기가 더 어려워집니다. 생성 된 내용에 대해 mod_expires 작업을 수행하여 응답에 기본 헤더를 설정할 수 있습니다.

<?php header('Expires: '.gmdate('D, d M Y H:i:s \G\M\T', time() + 3600)); ?>

(에서 가져온 : @brianegge의 스택 오버플로 답변 , mod_expires 솔루션도 설명되어 있습니다)

이제는 자바 스크립트 파일과 같은 정적 파일 에서는 작동하지 않습니다 . 정적 파일의 경우 브라우저와 소스 파일 사이에는 아파치 (만료 모듈 없음)가 있습니다. 브라우저에서 수행되는 자바 스크립트 파일의 캐싱을 방지하기 위해 js URL의 끝에 임의의 토큰 을 사용할 수 있습니다 ?rd=45642111. URL은 다음과 같습니다.

<script type="texte/javascript" src="my/url/myjs.js?rd=4221159546">

페이지의이 URL이 PHP 파일에 의해 생성되면 PHP로 임의의 부분을 추가 할 수 있습니다. 랜덤 쿼리 문자열 파라미터를 단순히 추가하여 URL을 랜덤 화하는이 방법은 예를 들어 ajax jQuery 요청의 캐시없는 설정의 기본 사항입니다. 브라우저는 다른 쿼리 문자열을 가진 2 개의 URL이 동일한 것으로 간주하지 않으며 캐시 된 버전을 사용하지 않습니다.

편집하다

mod_headers 테스트해야합니다 . mod_headers가있는 경우 헤더 키워드를 사용하여 Expires 헤더를 직접 설정할 수 있습니다 .


고맙게도 불행히도 PHP 파일을 사용하지 않습니다. mod_headers를 살펴보고 mod_expires를 설치하겠습니다.
dmck

CSS 파일 캐싱을 방지하려면 어떻게해야합니까?
Aaron Franke

1
<FilesMatch "\.(js|css)$">
  ExpiresActive On
  ExpiresDefault A1
  Header append Cache-Control must-revalidate
</FilesMatch>

좋은 품질의 답변이 아닙니다. OP에보고 된 문제를 해결하기위한 단계는 무엇인지 자세히 설명하십시오.
leopal
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.