Имеет ли смысл устанавливать заголовки кэша Http на ответ 404? - PullRequest
1 голос
/ 11 октября 2010

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

У меня есть довольно стандартный Asp .net Mvc Controller, который читает базу данных и, если в базе данных найдена строка, возвращает байты изображения в виде FileResult. Если строка не найдена, у меня есть результат пользовательского действия, который устанавливает статус ответа 404. Я не выкидываю исключение, а вместо этого позволяю IIS обрабатывать статус 404 и возвращать статический файл.

public class ContentMediaNotFoundResult : ActionResult
{
    public ContentMediaNotFoundResult() { }

    public override void ExecuteResult(ControllerContext context)
    {
        //-- Here the only thing we are doing is setting the Response code to 404 and then we are   going to let IIS service the request
        //-- based on the settings in system.webServer/httpErrors (which may come from the root .config, so be careful)
        context.HttpContext.Response.StatusCode = 404;
    }
}

Недавно мы тестировали Firefox v3.6.1 и заметили, что браузер делает несколько запросов (3, если быть точным) для каждого изображения, поэтому наша фабрика контроллеров подвергалась 3 ударам и 3 раза обращалась к базе данных из нашего метод действия. Такое поведение только радует Firefox (IE, chrome были нормальными).

У меня вопрос: имеет ли смысл добавлять заголовки кэша Http к 404 ответам в моем ContentMediaNotFoundResult, чтобы мой метод действия не попадал в базу данных постоянно.

Ответы [ 3 ]

2 голосов
/ 12 октября 2010

Конечно, вы можете установить заголовки кэша на 404 с. Как упоминал @Darin, старение кэша может повлиять на любые проблемы с заменой изображения 404, но это та же проблема с кэшированием любого объекта, который может измениться.

Похоже, что только 5xx ошибки, вероятно, не должны кэшироваться, но 4xx - это нормально.

1 голос
/ 05 июля 2012

Я считаю, что это зависит. Если у вас есть быстро меняющийся веб-API, в котором ресурс может быть добавлен в любой момент, вам нужно, чтобы клиенты всегда запрашивали источник.

Если у вас много контента, который мало меняется, кеширование 404 может очень помочь.

Проверьте этот реальный пример:

http://highscalability.com/blog/2010/3/26/strategy-caching-404s-saved-the-onion-66-on-server-time.html

1 голос
/ 12 октября 2010

Нет смысла устанавливать заголовки кэша на 404 страницах, потому что если позже изображение с этим идентификатором будет добавлено в базу данных, пользователь все равно получит 404 с. Возможно, вам следует попытаться понять, почему FireFox отправляет 3 запроса на этот URL.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...