2013-10-01 80 views
1

我遇到了問題(在不同的主機上),我不能真正改變主機設置,所以我正在尋找PHP解決方案。Symfony響應緩存控制頭重複

當我向瀏覽器發送響應(Symfony的HttpFoundation \ Response)時,一些標題是重複的,它們自相矛盾。比瀏覽器不會緩存它們。

PHP代碼

$response = new Response(
     $html, 
     200, 
     array(
      "content-type" => "text/html; charset=UTF-8", 
     ) 
    ); 

    $response->setCache(array(
     'last_modified' => $page->getEditedAt(), 
     'max_age'  => $staticCache, 
     's_maxage'  => $staticCache, 
     'private'  => false, 
     'public'  => true, 
    )); 

在某些瀏覽器

緩存控制報頭:最大生存週期= 1800,公共,S-最大生存週期= 1800

緩存控制:無-store,no-cache,must-revalidate,post-check = 0,pre-check = 0

Date:2013年10月1日星期二15:08:39 GMT

到期日:星期四,1981年11月19日8時52分00秒GMT

雜注:無緩存

但我的頁面應該是公開和緩存。標題的其餘部分在哪裏,我如何關閉它們?

回答

0

PHP正在覆蓋您的緩存設置,即「過期」日期非常具體,並且包含在PHP source code中。根據this的堆棧溢出回答,這是開發者的生日。

您可以通過更改php.ini中的session.cache-limiter setting來關閉此功能。 session_cache_limiter function頁面有更多關於在這裏設置的可能值的信息。嘗試將值設置爲公開或無效並再次測試。

你可以看到session.cache_limiter設置的當前值是什麼與回聲值小的測試頁:

<?php 

echo(ini_get('session.cache_limiter')); 

你說你正在尋找一個PHP的解決方案,因爲你不能在編輯主機設置。您可以使用ini_set函數更改代碼中的值。