Могу ли я остановить iCal от кэширования своего сгенерированного PHP фида iCalendar? - PullRequest
5 голосов
/ 01 февраля 2012

Я сделал динамически генерируемый канал iCalendar с PHP, придерживаясь RFC 5545. По большей части он работает просто отлично, за исключением того, что iCal (то есть встроенная программа календаря Mac OS X), похоже, отказывается отражать обновления к событиям, которые у него были ранее уже скачал. Я предполагаю, что это связано с кэшированием. Можно ли как-то сказать iCal не кэшировать мой канал?

РЕДАКТИРОВАТЬ: О да, я забыл упомянуть, что я уже пытался заставить каждый VEVENT иметь разные UID каждый раз, когда вызывается канал (мой формат UID "id", где текущее время в RFC 5545 DATE- ВРЕМЯ, и является уникальным идентификатором события в моей базе данных). Я также попытался поиграть с Content-type в шапке; эта проблема возникает независимо от того, установил ли я текст / обычный или текст / календарь

Ответы [ 2 ]

2 голосов
/ 01 февраля 2012

Вы пытались добавить заголовки "без кэширования"?

<?php
header( 'Expires: Sat, 26 Jul 1997 05:00:00 GMT' ); //date in the past
header( 'Last-Modified: ' . gmdate( 'D, d M Y H:i:s' ) . ' GMT' ); //tell it we just updated
header( 'Cache-Control: no-store, no-cache, must-revalidate' ); //force revaidation
header( 'Cache-Control: post-check=0, pre-check=0', false );
header( 'Pragma: no-cache' ); 
?>
2 голосов
/ 01 февраля 2012

Я никогда не имел дела с iCal, но попробуйте настроить заголовки для принудительной повторной проверки.

<?php
    header("Cache-Control: no-cache, must-revalidate"); // HTTP/1.1
    header("Expires: Sat, 26 Jul 1997 05:00:00 GMT"); // Date in the past
?>
...