2016-10-12 7 views
4

При отладке производственной проблемы мы обнаружили, что GET-запросы к URL-адресу возвращают 500 Internal Server Error для одного пользователя, но возвращают 200 OK для всех остальных. Оказалось, что 500 из кэша обслуживается, но любая попытка с воспроизведением этой ошибки не увенчалась успехом.Может ли серверная ошибка сервера 500 Internat быть кеширована браузером?

Мой вопрос: возможно ли, что сообщение об ошибке будет кэшировано браузером? Если да, то какие браузеры поддерживают его и какие заголовки кеша мне нужны для его тиражирования?

Моя интуиция заключается в том, что ответ на ошибку не должен быть кэширован, потому что вам будет отказано в обслуживании, даже если ошибка исправлена. На основе Which HTTP status codes are cacheable? также кажется, что 500 не следует кэшировать вообще. Является ли политика кэширования последовательно реализована в браузерах?

ответ

2

A 500 Internal Server Error указывается как по умолчанию не кэшируется. Для справки см. Section 6.1 of RFC 7231 и Section 6.6.1 500 Internal Server Error of RFC 7231. Если 500 по умолчанию будет кэшироваться, спецификация определит это явно.

Однако, в зависимости от явных заголовков кэширования это поведение может быть изменено, и это вполне может случиться так, что 500 ответа в кэше, потому что Section 3 of RFC 7234 говорит, среди других соответствующих вещей вашей проблемы, это:

Обратите внимание, что любое из перечисленных выше требований может быть переопределено расширением управления кешем;

Я предполагаю, что что-то было испорчено с помощью кеширующих заголовков в случае ошибки 500.

Чтобы спровоцировать кеширование ответа 500, можно попытаться установить флаг public в заголовке ответа Cache-Control.

 Смежные вопросы

  • Нет связанных вопросов^_^