2012-05-30 3 views
5

В IIS 7.5, когда у меня нет выхода с поддержкой кэширования, мой PHP скрипт успешно устанавливает кэширование браузера в заголовке Cache-Control:Почему? Выход Кэширование Автоматически отключает браузер Кэширование в IIS 7.5

Cache-Control: макс возраста = 43200, общественный
Content-Type: текст/HTML
Expires: Wed, 30 May 2012 22:15:18 GMT
Сервер: Microsoft-IIS/7.5
X-Powered-By: PHP/5.4.3
Дата: ср, 30 май 2012 10:15:18 GMT
Подключение: закрыть
Content-Length: 5105

Однако, если включить кэширование вывода для файлов .php, я получаю следующий заголовок:

Cache-Control: нет-кэша, макс-возраст = 43200, общественный
Content -Тип: текст/html
Истекает: Wed, 30 May 2012 22:25:34 GMT
Сервер: Microsoft-IIS/7.5
X-Powered-By: PHP/5.4.3
Дата: Wed, 30 Май 2012 года 10:25:34 GMT
Подключение: закрытие

(уведомление «no-cache» добавлено в Cache-Control до работы моего скрипта php)

Нет, я нашел, чтобы предотвратить добавление «no-cache» в Cache- Управляющий ключ, если для типа файла включено кэширование вывода. Я попытался сделать это в файле web.config:

 <customHeaders> 
      <remove name="X-Powered-By" /> 
    <remove name="Cache-Control" /> 
      <add name="Cache-Control" value="public" /> 
     </customHeaders> 

Это не работает. Почему это должно быть настолько взаимоисключающим? Я бы хотел, чтобы оба кэша вывода и кэширования браузера были включены.

ответ

8

К сожалению, интерфейс диспетчера IIS не позволяет использовать все функции, поддерживаемые модулем вывода кэширования. Одна из этих функций - установить расположение кэша, которое косвенно управляет заголовком управления кешем. Вы должны вручную изменить свой web.config, чтобы изменить его. Синтаксис следующие:

<caching> 
    <profiles> 
     <add extension=".php" ..... location="Any" /> 
    </profiles> 
</caching> 

<add /> тега будет иметь больше варианта в зависимости от того, как вы хотите, чтобы ваше Кэширование работать. Важная часть состоит в том, чтобы добавить атрибут location="...". Следующие значения поддерживаются и они контролируют заголовок кэш-управления следующим образом:

Any или Downstream = public

ServerAndClient или Client = private

None или Server или пустой = no-cache

Как атрибут location отсутствует по умолчанию, IIS по умолчанию отправит заголовок Cache-Control: no-cache, когда выходное кэширование будет ena кровоточили. Более подробную информацию о кэшировании выходных данных и поддерживаемых функциях можно найти по адресу: Response caching in IIS7

+1

Вы потрясающий. Добавление атрибута местоположения позволило решить мою проблему. Я не могу вас поблагодарить. Большое спасибо! –

+0

Есть ли у вас предложения по добавлению динамического заголовка Expires http? См. Здесь: http://stackoverflow.com/questions/10825497/iis-7-5-how-do-you-add-a-dynamic-http-expires-header –

+0

Ответил на этот вопрос индивидуально. –