Что делает HTTP-заголовок If-None-Match: * средний?

Что означает следующий заголовок HTTP 1.1?

If-None-Match: *

Я понимаю это при использовании сильного или слабого Завершающего тега или даже списка Завершающих тегов, но я не делаю understant, это - использование при использовании звезды (*).

Править: Было бы хорошо иметь некоторый псевдокод (код PHP, хороший также), который покажет, как/какой ответить на "If-None-Match: *".

46
задан Chris Huang-Leaver 30 June 2012 в 05:17
поделиться

2 ответа

Ответ: это зависит.

Предположим, что мы получили

If-None-Match: *
If-Modified-Since: <yesterday date>

, и страница была изменена сегодня .

Во-первых, мы посмотрим на * , который сообщает нам: «Возврат 304, если ресурс там и условие (2). Хорошо, ресурс существует, но условие (2) состояния: «Вернуть только 304, если дата позже, чем тока». Таким образом, это условие не выполнено, и страница будет доставлена ​​полностью.

Если мы не получили , если они не получили , если он модифицирован - с , ответ был бы 304.

Если ресурс не существует по запросу, мы вернули соответствующую коду ( Как будто не было № , если-не совпадают ).

304 следует вернуть только в ответ на получение запросов GET и GEAD, и все заголовки ответов, связанные с кэшем, должны быть там. Для всех других типов запроса ваш сервер должен ответить на 412 (предварительное обеспечение не удалось).

Я надеюсь, что это поможет;)

40
ответ дан 26 November 2019 в 20:40
поделиться

цитируют из RFC 2616 (HTTP 1.1) :

... если дается «* *», и любое существующее существо существует для этого ресурса, то сервер должен Не выполняйте запрошенный метод, если не требуется для этого, потому что дата модификации ресурса не соответствует, что поставляется в поле «Модифицированное IF-Modified», поскольку в поле «Заголовок».

RFC продолжает сказать, что вместо выполнения запроса серверы должны отвечать на 304 (не изменено) для получения запросов GET и GEAD, и что они должны отвечать на 412 (сбой предварительного кондиционера) для всех других типов запросов. Но это только в том случае, если сервер на самом деле имеет определенную версию запрошенного ресурса. Если у вас нет ни каких-либо объектов, то вы должны работать , обрабатывают запрос (вероятно, с 404, так как у вас ничего нет).

Чтобы обработать запрос, сначала выясните, что будет делать сервер, если этот заголовок не был настоящим. Если результат этого запроса не составляет 2xx или 304, то служить запросу как обычно. Но если результат запроса будет 2xx или 304, затем обрабатывать модифицированный случай. Когда это звезда, то просто верните 304 немедленно (если не преуверено, если они модифицированы - с). Если это один или несколько тегов на объект, то проверьте, сочтет ли какие-либо из этих тегов на тег того, что вы планировали служить ответом. Если есть какой-либо матч, возврат 304; Если нет матча, то служите ему как вы обычно бы.

Позже в RFC есть больше:

Значение «if-none-match: *» состоит в том, что метод не должен выполняться, если представление, выбранное сервером Origin (или кэшем, возможно, используя Обратный механизм, см. Раздел 14,44 )) и должно быть выполнено, если представление не существует. Эта функция предназначена для того, чтобы быть полезна в предотвращении расчетов между операциями поставок.

То есть звезда позволяет клиенту сказать: «Не помещайте этот файл, если есть любого версии этого файла уже там».

11
ответ дан 26 November 2019 в 20:40
поделиться
Другие вопросы по тегам:

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