Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Безопасность и идемпотентность запросов
- Выполнение запроса может иметь побочные эффекты. Примеры побочных эффектов: удаление заказа из корзины в интернет-магазине, выход из аккаунта или изменение пароля от учётной записи. Пример запроса без побочных эффектов — поисковый запрос в Яндексе, загрузка картинки или открытие страницы, адрес которой вы ввели в адресной строке браузера.
- Отсутствие побочных эффектов не означает, что состояние сервера не должно каким-либо образом измениться при выполнении запроса. Например, поисковая система может вести историю ваших запросов, а интернет-магазин — подсчитывать количество показов страницы с товаром.
- ------------------------------------------------------------------------------------------------------
- Методы GET и HEAD предназначены для получения данных. Поэтому они должны быть безопасными, то есть не иметь побочных эффектов. Браузеры могут делать предварительную загрузку связанных страниц, отправляя GET-запросы по адресам всех гиперссылок, найденных на странице. Если деструктивные действия вроде выхода из учётной записи сервер будет выполнять по GET-запросу, пользователь получит негативный опыт взаимодействия с таким сайтом из-за самопроизвольного выхода из аккаунта. Также браузер или прокси-сервер могут кэшировать ответ на GET-запрос и вместо отправки повторного запроса возвращать закэшированные данные. Это ещё одна причина не использовать побочные эффекты в этих запросах.
- Иногда ради удобства побочные эффекты GET-запроса могут быть допустимы. Например, для подтверждения email адреса сайт может прислать письмо со ссылкой, содержащей секретный код. При переходе по ссылке сайт будет считать адрес электронной почты подтверждённым. Очень хорошо, если при этом сайт убедится, что вы недавно авторизовались в этом браузере, и при необходимости попросит ввести пароль. Иначе, если вы сделаете опечатку при вводе email, доступ к вашей учётной записи получит незнакомец с похожим адресом.
- -------------------------------------------------------------------------------------------------------
- Ещё одно свойство, которым может обладать метод — идемпотентность.
- Метод идемпотентный, если побочный эффект от нескольких одинаковых запросов идентичен побочным эффектам от одного запроса. Идемпотентными должны быть методы GET, HEAD, PUT и DELETE. Клиенты могут полагаться на идемпотентность запросов, когда повторно отправляют запрос при разрыве соединения с сервером и не боятся, что эффект от нескольких запросов будет отличаться от эффекта одного запроса.
- -----------------------------------------------------------------------------------------------------
- Запросы POST и PATCH могут не обладать идемпотентностью, поэтому их повтор при обрыве связи может быть нежелателен. Например, сервер онлайн-банка мог успеть обработать POST-запрос, переводящий деньги с вашего счёта, но из-за проблем с сетью ответ до браузера не дошёл. Повторная отправка запроса привела бы к ещё бы одному переводу денег, что нежелательно. По этой причине веб-браузеры предупреждают о повторной отправке данных формы при нажатии клавиши F5, если текущая веб-страница была получена методом POST.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement