Если браузер может кэшировать запросы PATCH - PullRequest
0 голосов
/ 28 декабря 2018

Если вы выбираете изображение для отображения второй или n + 1 раз, или аналогичным образом получаете JSON, и ничего не изменилось, тогда браузер на самом деле не должен загружать / извлекать контент.Вот как запросы GET работают с кэшированием.

Но мне интересно, гипотетически, если вместо использования GET вы используете PATCH для получения изображения или JSON.Интересно, может ли браузер по-прежнему использовать свою кэшированную версию, если ничего не изменилось, или что нужно сделать, чтобы PATCH работал как GET, чтобы он не извлекал кэшированное содержимое.

1 Ответ

0 голосов
/ 29 декабря 2018

Важно понимать, что PATCH не для извлечения ничего.Вы вносите изменения на сервере, и ответ может содержать информацию о том, как было применено изменение.

HTTP-запросы, отличные от GET, иногда могут кэшироваться.Чтобы узнать, если PATCH, вы можете прочитать RFC.В RFC есть следующее:

Ответ на этот метод кэшируется, только если он содержит явную информацию о свежести (например, заголовок Expires или директива Cache-Control: max-age))как заголовок Content-Location, соответствующий Request-URI, указывающий, что тело ответа PATCH является представлением ресурса.Кэшированный ответ PATCH может использоваться только для ответа на последующие запросы GET и HEAD;он НЕ ДОЛЖЕН использоваться для ответа на другие методы (в частности, PATCH).

Это уже предполагает «нет», выполнение запроса PATCH дважды не приведет к пропуску второй секунды.

Второе, на что нужно обратить внимание при использовании HTTP-методов, это то, являются ли они идемпотентными или безопасными.PATCH не является ни тем, ни другим.

RFC7231 может сказать о кешируемых методах:

Как правило, безопасные методы, которые не зависят от текущего или достоверного ответа, определяются как кешируемые;эта спецификация определяет GET, HEAD и POST как кешируемые, хотя подавляющее большинство реализаций кеша поддерживают только GET и HEAD.

Обе они предполагают, что 'no', PATCH не кешируется,и нет никакого набора заголовков HTTP, которые сделают это так.

...