Cache-Control 的 HTTP 回應標頭在 Apache httpd 中不起作用

Cache-Control 的 HTTP 回應標頭在 Apache httpd 中不起作用

我已經在 apache 中為我的 JS 檔案設定了 Cache-Control 1 週,但是當我檢查瀏覽器時,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

您需要啟用 headers 模組,假設是 debian:

sudo a2enmod headers

然後為了使變更生效,您必須重新載入或重新啟動 apache:

sudo service apache2 reload

如果這沒有效果,您的配置的其他幾個部分也可能會覆寫 Cache-Control 指令,例如從您的 Web 根目錄提供服務的 .htaccess 中。

另外,我不確定 Apache 是否允許在您的伺服器設定中使用任何大寫字母。可能你必須使用(注意大寫的 I),如果 apache 不能識別你的大寫,它應該在重新啟動時打印錯誤。

答案2

Cache-Control:no-cache不會單獨出現,它是由應用程式產生的。

無論 Apache 中是否配置了某些內容,應用程式傳回的任何內容都將覆蓋預設值。

因此,除了@MartinOlika 的答案之外,還必須審查應用程序,或者如果您願意,可以在應用程式層級完成所需的配置。

相關內容