Действительно ли мой кэш Сценария PHP является (общедоступной) товарищеской встречей?

Я завершил маленькое приложение PHP, которое может вручить много документов. Эти документы должны быть кэшируемыми клиентами и прокси.

Так как прокси могут кэшировать мои результаты, я должен быть дополнителен осторожный, потому что документы, которым я вручаю, могут иметь различные типы ПАНТОМИМ (согласование содержания на основе $ _SERVER ['HTTP_ACCEPT']) и различные языки (базирующийся в этом порядке: $ _POST оценивают / $ _GET значение / URL / значение сессии PHP / $ _COOKIE значение / $ _SERVER ['HTTP_ACCEPT_LANGUAGE'] / значение сценария по умолчанию).

Для короткого подведения страница может быть подана со многим типом MIME и многими языками с тем же URL (измененный вопрос: посмотрите редактирование ниже).

Чтобы помочь кэшироваться на прокси, я использую, "Варьируйтесь: Примите" заголовок в сочетании с заголовком Завершающего тега. Завершающие теги являются MD5 текущего языка и последней измененной метки времени.

Я всегда:

  • Отправьте, Истекает заголовок
  • Отправьте заголовок Управления Кэша
  • Отправьте Измененный в последний раз заголовок
  • Отправьте заголовок Типа контента
  • Отправьте заголовок Завершающего тега (на основе текущего языка и Измененной в последний раз метки времени)
  • Отправьте Content-Language
  • Отправьте, "Варьируйтесь: Примите" заголовок, если документ является XHTML

Теперь с моим вопросом: этого достаточно, чтобы помочь кэшироваться на прокси и клиентах? Я пропускал вещь/заголовок?

Для помощи Вам вот, заголовок ответа 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 все еще), моя текущая реализация, хорошо для "общедоступного" кэша (кэш на клиентах + прокси)?

5
задан AlexV 4 January 2010 в 13:34
поделиться

3 ответа

Поскольку ваш вывод также зависит от того, что прокси-сервер не может знать, как данные сессии, не будет ли проще отправить (не кэшируемый) перенаправление на реальное содержимое, которое было бы исправлено для заданного URL (с параметрами) и, следовательно, намного проще кэшировать. Я знаю, что это включает в себя дополнительный обход, но он, вероятно, гораздо менее подвержен ошибкам и также вызовет меньше проблем с прокси, которые не полностью понимают/поддерживают все ваши комбинации заголовков.

Также, я предполагаю, что если у вас два клиента, проходящих через один и тот же прокси, но с разными языковыми cookies, ваш текущий метод вернет два разных ETags для одного и того же URL, что заставит прокси обновлять свою копию каждый раз, когда он видит другого клиента.

.
3
ответ дан 15 December 2019 в 01:03
поделиться

Если в ответе "Accept" и "Accept-Language" значение ответа меняется, то оба должны быть указаны в заголовке ответа "Vary"

.
0
ответ дан 15 December 2019 в 01:03
поделиться
[

] Я считаю, что вы должны быть в порядке в принципе -- добавление заголовка Vary означает, что кэш должен содержать несколько экземпляров ваших данных, с ключом ETag. [

] [

] Я хотел бы отметить, что вы не только отличаетесь на Accept, вы также отличаетесь на Cookie и Accept-Language. Изменение с помощью cookie означает, что прокси-сервер должен будет проверять каждый запрос, но должен иметь возможность использовать заголовок If-None-Match, чтобы сервер указывал, какой (уже кэшированный) ETag должен быть использован [

].
1
ответ дан 15 December 2019 в 01:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: