Я завершил маленькое приложение PHP, которое может вручить много документов. Эти документы должны быть кэшируемыми клиентами и прокси.
Так как прокси могут кэшировать мои результаты, я должен быть дополнителен осторожный, потому что документы, которым я вручаю, могут иметь различные типы ПАНТОМИМ (согласование содержания на основе $ _SERVER ['HTTP_ACCEPT']) и различные языки (базирующийся в этом порядке: $ _POST оценивают / $ _GET значение / URL / значение сессии PHP / $ _COOKIE значение / $ _SERVER ['HTTP_ACCEPT_LANGUAGE'] / значение сценария по умолчанию).
Для короткого подведения страница может быть подана со многим типом MIME и многими языками с тем же URL (измененный вопрос: посмотрите редактирование ниже).
Чтобы помочь кэшироваться на прокси, я использую, "Варьируйтесь: Примите" заголовок в сочетании с заголовком Завершающего тега. Завершающие теги являются MD5 текущего языка и последней измененной метки времени.
Я всегда:
Теперь с моим вопросом: этого достаточно, чтобы помочь кэшироваться на прокси и клиентах? Я пропускал вещь/заголовок?
Для помощи Вам вот, заголовок ответа HTTP для тестовой страницы (на моем окружении):
"
Date Wed, 30 Dec 2009 18:56:26 GMT
Server Apache/2.0.63 (Win32) PHP/5.1.0
X-Powered-By PHP/5.1.0
Set-Cookie Tests=697daqbmple2e1daq2dg74ur96; path=/
Expires Wed, 30 Dec 2009 21:56:26 GMT
Cache-Control public, max-age=10800
Last-Modified Mon, 28 Dec 2009 15:11:49 GMT
Etag "44fa50be4638161a596e4b75d6ab7a94"
Vary Accept
Content-Language en-us
Content-Length 3043
Keep-Alive timeout=15, max=100
Connection Keep-Alive
Content-Type application/xhtml+xml; charset=UTF-8
"
Править: Хорошо я понимаю, что в этом случае, вручающем документ со многими ПАНТОМИМАМИ и имеющем различные языки (который может прибыть из такого количества источников - видят выше), просто плохой дизайн. Если Вы хотите сделать, это просто использует "частный" кэш (никакой кэш на прокси)... Я корректен?
Если каждый язык имеет свой собственный URL (но каждый URL может быть подан со многими MIME все еще), моя текущая реализация, хорошо для "общедоступного" кэша (кэш на клиентах + прокси)?
Поскольку ваш вывод также зависит от того, что прокси-сервер не может знать, как данные сессии, не будет ли проще отправить (не кэшируемый) перенаправление на реальное содержимое, которое было бы исправлено для заданного URL (с параметрами) и, следовательно, намного проще кэшировать. Я знаю, что это включает в себя дополнительный обход, но он, вероятно, гораздо менее подвержен ошибкам и также вызовет меньше проблем с прокси, которые не полностью понимают/поддерживают все ваши комбинации заголовков.
Также, я предполагаю, что если у вас два клиента, проходящих через один и тот же прокси, но с разными языковыми cookies, ваш текущий метод вернет два разных ETags для одного и того же URL, что заставит прокси обновлять свою копию каждый раз, когда он видит другого клиента.
.Если в ответе "Accept" и "Accept-Language" значение ответа меняется, то оба должны быть указаны в заголовке ответа "Vary"
.] Я считаю, что вы должны быть в порядке в принципе -- добавление заголовка Vary означает, что кэш должен содержать несколько экземпляров ваших данных, с ключом ETag. [
] [] Я хотел бы отметить, что вы не только отличаетесь на Accept, вы также отличаетесь на Cookie и Accept-Language. Изменение с помощью cookie означает, что прокси-сервер должен будет проверять каждый запрос, но должен иметь возможность использовать заголовок If-None-Match, чтобы сервер указывал, какой (уже кэшированный) ETag должен быть использован [
].