отправка прагмы управления кешем/истечения/прагмы с ответом 404 - действительна/понимаема современными браузерами?

мы работаем над сокращением части «бессмысленного» трафика.

если мы отправим действительные заголовки управления кешем (например, «do cache») с ответом 404, будут ли современные браузеры кэшировать, что запрошенный ресурс не существует?

мы используем собственный обработчик 404 на основе php, который отправлял не кэшировать заголовки из-за создания сеанса, поэтому мы удалили их. но теперь интересно, если для ресурсов мы ОПРЕДЕЛЕННЫЕ недействительны, должны ли мы отправлять правильные заголовки кеша?

между прочим, это общедоступные ресурсы, доступ к которым осуществляется по одному и тому же uri для всех пользователей.

Благодарность!


person anonymous-one    schedule 09.07.2011    source источник
comment
Пожалуйста, назовите заголовки кеша, которые вы установили, и как.   -  person hakre    schedule 09.07.2011


Ответы (1)


Современные браузеры имеют реализацию HTTP-протокола, идеально близкую к стандартной, то же самое и для прокси-серверов, которые вам следует примите во внимание, хотите ли вы влиять на пользовательский и непреднамеренный трафик ботов. Текущая версия – 1.1, некоторые выдержки:

10.4 Ошибка клиента 4xx

Код состояния класса 4xx предназначен для случаев, когда клиент, похоже, допустил ошибку. За исключением ответа на запрос HEAD, серверу СЛЕДУЕТ включать объект, содержащий объяснение ситуации с ошибкой, а также того, является ли это временным или постоянным состоянием. Эти коды состояния применимы к любому методу запроса. Пользовательские агенты ДОЛЖНЫ отображать пользователю любой включенный объект.

Если клиент отправляет данные, реализации сервера, использующей TCP, СЛЕДУЕТ быть осторожным, чтобы гарантировать, что клиент подтверждает получение пакета(ов), содержащего ответ, до того, как сервер закроет входное соединение. Если клиент продолжает отправлять данные на сервер после закрытия, стек TCP сервера отправит клиенту пакет сброса, который может стереть неподтвержденные входные буферы клиента, прежде чем они смогут быть прочитаны и интерпретированы приложением HTTP.

Более конкретно для 404:

10.4.5 404 Не найдено

Сервер не нашел ничего, соответствующего Request-URI. Никаких указаний на то, является ли состояние временным или постоянным, не дается. Код состояния 410 (Gone) СЛЕДУЕТ использовать, если сервер через какой-то внутренне настраиваемый механизм знает, что старый ресурс постоянно недоступен и не имеет адреса пересылки. Этот код состояния обычно используется, когда сервер не хочет точно раскрывать, почему запрос был отклонен, или когда никакой другой ответ не применим.

Вот вам и код ответа 404.

Ты спросил:

теперь [мы] задаемся вопросом, если для ресурсов, которые мы НЕВЕРОЯТНО, недействительны, должны ли мы отправлять правильные заголовки кеша?

Вы не указали какие-либо конкретные заголовки кеша, которые хотели бы использовать, поэтому отвечать на ваш вопрос немного неточно. Кэширование — это отдельный раздел спецификации протокола: 13. в HTTP.

Как правило, вы ищете следующее: выдержка из 13.1. .1 Правильность кеша:

Правильный кэш ДОЛЖЕН отвечать на запрос самым последним ответом, хранящимся в кеше, соответствующим запросу (см. разделы 13.2.5, 13.2.6 и 13.12), который соответствует одному из следующих условий:

...

 3. It is an appropriate 304 (Not Modified), 305 (Proxy Redirect),
    or error (4xx or 5xx) response message.

Таким образом, вы можете кэшировать ответные сообщения 404 и сигнализировать им о кэшировании. Прокси и клиенты должны справиться с этим.

person hakre    schedule 09.07.2011
comment
да, это на самом деле имеет большой смысл... что мы в конечном итоге сделаем: а) если нет заголовка if-modified-since, отправляем заголовки кеша + пользовательскую страницу 404, б) если да заголовок if-modified-since, отправляем 304 не модифицированный код состояния без тела. Спасибо. - person anonymous-one; 09.07.2011
comment
@anonymous-one: Что ж, это даст вам HEAD-обходы для скрипта 404 php, который не имеет никакого смысла, поскольку он все равно будет вызываться. Если вы действительно уверены, что ресурс недействителен, разрешите кэширование в течение нескольких дней и не делайте ничего подобного, если он был изменен с тех пор. Просто дайте ему кэшироваться. Если вы можете определить ресурс, который на самом деле ищут пользователи, используйте вместо этого 410 Gone или 302, перемещенный с заголовком местоположения и новым местоположением в теле, чтобы вы могли сохранить связь в поисковых системах и внешних ресурсах. Пусть этот ответ также кэшируется в течение нескольких дней. - person hakre; 09.07.2011