Цитата из RFC 2616 (HTTP 1.1):
... если дан "*" и для этого ресурса существует какой-либо текущий объект, то сервер НЕ ДОЛЖЕН выполнять запрошенный метод, если это не требуется, потому что дата модификации ресурса не совпадает с датой, предоставленной в If-Modified-Since поле заголовка в запросе.
Далее в RFC говорится, что вместо выполнения запроса серверы должны отвечать 304 (без изменений) для запросов GET и HEAD и что они должны отвечать 412 (предварительное условие не выполнено) для всех других типов запросов. Но это только в том случае, если на сервере действительно есть какая-то версия запрошенного ресурса. Если у вас нет сущностей, вы должны обработать запрос (возможно, с 404, поскольку у вас ничего нет).
Чтобы обработать запрос, сначала выясните, что бы сделал сервер, если бы этот заголовок не присутствовал. Если результат этого запроса не будет 2xx или 304, то обработайте запрос как обычно. Но если результатом запроса будет 2xx или 304, обработайте случай If-None-Modified. Если это звезда, то просто немедленно верните 304 (если только это не превзойдет If-Modified-Since). Если это один или несколько тегов объекта, проверьте, соответствует ли какой-либо из этих тегов тегу объекта, который вы планировали использовать в качестве ответа. Если есть совпадение, верните 304; если совпадения нет, подавайте его, как обычно.
Позже в RFC есть еще:
Значение «If-None-Match: *» заключается в том, что метод НЕ ДОЛЖЕН выполняться, если представление, выбранное исходным сервером (или кешем, возможно с использованием механизма Vary, см. Раздел 14.44) существует, и ДОЛЖЕН выполняться, если представление не существует. Эта функция предназначена для предотвращения скачков между операциями PUT.
То есть звездочка позволяет клиенту сказать: «Не помещайте этот файл, если там уже есть какая-либо версия этого файла».
person
Rob Kennedy
schedule
21.01.2010