Подтвердить что ты не робот

HTTP If-None-Match vs. If-Match

В настоящее время я создаю PHP script, который будет отвечать на HTTP "304 Not Modified", если требуется.

(см. вопроС# 2086712 за то, что я делаю до сих пор).

В настоящее время я отвечаю на следующее:

  • If-Modified-Since
  • If-None-Match

Но я узнал, что еще 3 заголовка могут вызвать "условное GET" (см. http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html#sec9.3):

  • Если-Match
  • Если-Unmodified-С
  • Если-Range

Последние 2 кажется неудовлетворительными для моей системы кеширования (они, похоже, используются при возобновлении "больших" загрузок), но я не нашел, может ли "If-Match" использовать в моей системе.

Используется ли "If-Match" в прокси или веб-браузере для "обычного" содержимого страницы? Как "If-Match" отличается от "If-None-Match"?

Должен ли я поддерживать эти 3 или только некоторые из них? Любая помощь приветствуется!

4b9b3361

Ответ 1

If-Match

Сервер ДОЛЖЕН вернуть ответ 412 (предварительный отказ), если:

  • Ни один из тегов сущностей не соответствует,
  • или "*" и не существует существующего объекта

If-Match следует игнорировать, если:

  • любой из тегов сущностей соответствует
  • или если запрос приводит к чему-либо другому, кроме состояния 2xx или 412 (без If-Match)
  • или если задано "*", и любой существующий объект существует для ресурса

Заключение в if-match:

  • Значение "If-Match: *" заключается в том, что метод должен выполняться, если представление, выбранное исходным сервером, существует и не должно выполняться, если представление не существует.

If-Match в RFC2616

If-Unmodified-С

Сервер ДОЛЖЕН вернуть ответ 412 (предварительный отказ), если:

  • запрошенный вариант был изменен с указанного времени

If-Unmodified-Since следует игнорировать, если

  • запрашиваемый ресурс не был изменен с момента, указанного в этом поле
  • или обычно запрос (т.е. без заголовка If-Unmodified-Since) приведет к чему-либо, кроме состояния 2xx или 412
  • или указанная дата недействительна

If-Unmodified-Since в RFC2616

If-Range

Неформально, его смысл заключается в том, "если сущность не изменилась, пришлите мне часть (я), которую я пропускаю; в противном случае отправьте мне всю новую сущность '

Предпосылки:

  • Заголовок If-Range ДОЛЖЕН использоваться только вместе с заголовком Range, а MUST игнорируется, если запрос не включает a Range, или если сервер не поддерживает операцию поддиапазона.

Сервер ДОЛЖЕН предоставить ответ 206 (частичный контент), если заголовок If-Range соответствует текущему тегу объекта для объекта. В противном случае сервер ДОЛЖЕН возвратить весь объект, используя ответ 200 (OK).

If-Range в RFC2616

Undefined результаты

Наличие следующей комбинации заголовков приводит к результату undefined:

  • If-Modified-Since и If-Match
  • If-Modified-Since и If-Unmodified-Since
  • If-None-Match и If-Match
  • If-None-Match и If-Unmodified-Since

Эти правила были разложены из следующих (можно найти в RFC2616):

  • If-Match и (If-None-Match или If-Modified-Since)
  • If-Modified-Since и (If-Match или If-Unmodified-Since)
  • If-None-Match и (If-Match или If-Unmodified-Since)
  • If-Unmodified-Since и (If-None-Match или If-Modified-Since)