HTTP Истекает значения заголовка «0» и «-1»
В чем разница между Expires: 0
и Expires: -1
в заголовке ответа HTTP? RFC 2616 определяет недопустимые форматы даты, особенно, включая значение «0», как истекло . Однако некоторые серверы (например, www.google.de) отвечают с Expires: -1
.
Есть ли преимущество перед использованием -1
над 0
или это даже требуется для некоторых сломанных HTTP-клиентов?
- Что такое q = 0,5 в заголовках Accept * HTTP?
- Как безопасно отправлять пароль через HTTP?
- Расширения браузера для автоматического изменения заголовков HTTP?
- Как сделать асинхронные HTTP-запросы в PHP
- Отправить запрос POST с данными, указанными в файле через Curl
- Как я могу сделать запрос POST с помощью multipart / form-data с использованием Java?
- Какие конкретные варианты использования требуют BOSH через WebSockets и длительный опрос?
- Добавьте заголовок Expires или Cache-Control в JSP
- HTTP-прокси-сервер для Windows, который пересылает SOCKS-прокси
- Разница между кодами перенаправления HTTP
- Как сделать HTTP-запрос с помощью файлов cookie на Android?
- Загрузите файл через HTTP-форму через MultipartEntityBuilder с индикатором выполнения
- Время ожидания подключения Http на Android не работает
Проблема заключается в том, как недопустимый заголовок Expires обрабатывается Internet Explorer (особенно более старые версии). IE использует механизм компоновки Trident и API WinINET для обработки HTTP-запросов. Как вы знаете, срок действия Expires может быть указан в заголовке HTTP
Expires: 0
или в метатеге
Во втором случае Expires стал частью содержимого ответа (не содержимого заголовка), поэтому он будет обработан Trident и затем распространен в WinINET :
Если WinINET загружает ответ с недопустимым заголовком Expires (например, тот, который не содержит допустимого значения HTTPDATE), и никаких других директив кэширования, он будет отмечать, что документ истекает час назад. Однако Trident не имеет такой логики. Если вы укажете недействительное время, Trident захватывает текущую временную метку и использует это как истечение срока действия. Trident также будет использовать текущую временную метку, если она встречает директиву Pragma: no-cache. Если пользователь пытается повторно перейти к текущему документу в течение той же самой точной секунды, что и HTTP / 404, то неверно обновленное истечение существующей записи кэша приведет к тому, что он будет считаться свежим для этого запроса. Если пользователь нажмет кнопку «Обновить» или «F5», кеш будет обходить, и страница 404 будет показана.
Другими словами, Expires: 0
не всегда приводит к немедленному истечению ресурса, поэтому его следует избегать и Expires: [some valid date in the past]
вместо этого следует использовать Expires: [some valid date in the past]
.
Истекает: -1 Заголовок Expires указывает, когда содержимое должно считаться устаревшим. Значение -1 указывает, что контент истекает немедленно, и его нужно будет повторно запросить, прежде чем снова отображать его. http://www.httpwatch.com/httpgallery/headers/
max-age = 0 просто сообщает кэшам (и пользовательским агентам), что ответ устарел от get-go, и поэтому они ДОЛЖНЫ повторить проверку ответа (например, с заголовком If-Not-Modified), прежде чем использовать кешированную копию, тогда как no -cache сообщает им, что они ДОЛЖНЫ повторить проверку перед использованием кешированной копии.
для получения дополнительной информации смотрите http://www.w3.org/Protocols/HTTP/1.1/rfc2616.pdf
Использование «-1» недействительно и будет обрабатываться так же, как «0». Он не должен запускать перезагрузку вообще.
Будьте осторожны: в некоторых браузерах он может дать 1 час дополнительно или использовать время истечения по умолчанию для кэширования.
1- Так лучше дать ему правильную старую дату, например:
Для формальной работы я советую дать текущее время времени meta Expires вместо использования старой фиксированной даты (что заставит поисковые системы, такие как Google, пометить ваш сайт как старый и не будет отображаться на верхних страницах)
2- если ваш Backend является PHP, вы можете справиться с ним так:
PS: Я даю час раньше, чем на случай.