HTTP If-None-Match по сравнению с если-соответствием

Я в настоящее время создаю Сценарий PHP, который ответит на HTTP "304 Не Измененный" при необходимости.

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

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

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

Но я узнал, что еще 3 заголовка могут инициировать "условное выражение, ДОБИРАЮТСЯ" (См. http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html#sec9.3):

  • Если-соответствие
  • If-Unmodified-Since
  • Если-диапазон

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

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

Я должен поддерживать те 3 или просто некоторые из них? Любое приветствие справки!

24
задан Community 23 May 2017 в 12:17
поделиться

1 ответ

If-Match

Сервер ДОЛЖЕН вернуть ответ 412 (Precondition Failed), если:

  • ни один из тегов сущности не совпадает,
  • или "*" не дано и ни один из существующих тегов сущности

If-Match не должен быть проигнорирован, если:

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

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

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

If-Match в RFC2616

If-Unmodified-Since

Сервер ДОЛЖЕН вернуть ответ 412 (Precondition Failed), если:

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

If-Unmodified-Since должен быть проигнорирован, если

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

If-Unmodified-Since в RFC2616

If-Range

Informally, его значение будет следующим: "если сущность неизменна, отправьте мне ту часть(ы), которую(ые) я пропустил(ы); в противном случае, отправьте мне всю новую сущность"

Preconусловия:

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

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

If-диапазон в RFC2616

Неопределенные результаты

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

  • If-Modified-Since и If-Match
  • If-Modified-Since и If-Unemodified-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-Unemodified-Since )
  • If-None-Match и ( If- Match или If-Unmodified-Since )
  • If-Unmodified-Since и ( If-None-Match или If-Modified-Since )
37
ответ дан 28 November 2019 в 23:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: