Cache-Control HTTP 응답 헤더가 Apache httpd에서 작동하지 않습니다.

Cache-Control HTTP 응답 헤더가 Apache httpd에서 작동하지 않습니다.

1주일 동안 Apache에서 JS 파일에 대한 Cache-Control을 설정했지만 브라우저를 확인하면 Cache-Control에 캐시가 표시되지 않습니다. 어디에서 구성이 누락되었나요?

아래는 Apache에서의 구성입니다.

<ifModule mod_headers.c>

  <filesMatch "\.(html|htm|png|js|css)$">
   Header set Cache-Control "max-age=604800, public"
  </filesMatch>

</ifModule>

브라우저에서 헤더 요청

    Request URL:http://test.com/Script.js?buildInfo=1.1.200
    Request Method:GET
    Status Code:200 OK
    Request Headersview source
    Accept:*/*
    Accept-Encoding:gzip,deflate,sdch
    Accept-Language:en-US,en;q=0.8
    **Cache-Control:no-cache**
    Connection:keep-alive
    Host:test.com
    Pragma:no-cache
    Referer:http://test.com/home.jsp
    User-Agent:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like      
    Gecko) Chrome/37.0.2062.120 Safari/537.36
    Query String Parametersview sourceview URL encoded
    buildInfo:1.1.200

    Response Headersview source
    Cache-Control:max-age=2592000
    Connection:keep-alive
    Content-Encoding:gzip
    Content-Type:text/javascript
    Date:Sun, 12 Oct 2014 16:17:46 GMT
    Expires:Tue, 11 Nov 2014 16:17:46 GMT
    Last-Modified:Tue, 07 Oct 2014 13:28:08 GMT
    Server:Apache
    Transfer-Encoding:chunked
    Vary:Accept-Encoding

답변1

데비안을 가정하고 헤더 모듈을 활성화해야 합니다:

sudo a2enmod headers

그런 다음 변경 사항을 적용하려면 Apache를 다시 로드하거나 다시 시작해야 합니다.

sudo service apache2 reload

이것이 작동하지 않으면 구성의 다른 여러 부분이 웹 루트에서 제공되는 .htaccess와 같이 Cache-Control 지시어를 재정의할 수도 있습니다.

또한 Apache가 서버 구성에 대문자를 허용하는지 확실하지 않습니다. 아마도 대문자 I를 사용해야 할 것입니다. 아파치가 대문자를 인식하지 못하면 재부팅 시 오류가 인쇄됩니다.

답변2

Cache-Control:no-cache단독으로 나타나지 않고 애플리케이션에 의해 생성됩니다.

Apache에 구성되어 있는지 여부에 관계없이 애플리케이션에서 반환된 모든 항목은 기본값을 재정의합니다.

따라서 @MartinOlika의 답변 외에도 애플리케이션도 검토해야 하며, 원하는 경우 애플리케이션 수준에서 필요한 구성을 수행할 수 있습니다.

관련 정보