Что происходит при HTTP методах GET, HEAD, OPTIONS, POST, PUT, PATCH
Что проверяют
Знаете ли вы свойства методов, а не только их бытовое назначение. Три свойства независимы: безопасность, идемпотентность, кэшируемость. Заодно смотрят, понимаете ли, откуда в панели сети берётся запрос OPTIONS, которого вы не писали.
Как отвечать
Сначала свойства:
- безопасные, то есть не меняющие состояние:
GET,HEAD,OPTIONS; - идемпотентные, то есть повтор не меняет результат: к безопасным добавляются
PUTиDELETE; - кэшируемые по умолчанию:
GETиHEAD.
Потом сами методы:
GET: получить представление ресурса, параметры в строке запроса;HEAD: то же самое, но возвращаются только заголовки. Удобно проверить наличие ресурса и его размер, не качая тело;OPTIONS: узнать возможности ресурса. В браузере вы видите его как предварительный запрос при кросс-доменном обращении, когда запрос непростой, например есть заголовок авторизации или тело в формате JSON. Сервер отвечает заголовками разрешения, и ответ можно закэшировать;POST: отправить данные на обработку. Что именно создастся, решает сервер, адрес созданного отдаёт вLocation;PUT: заменить ресурс целиком по известному адресу, отсюда идемпотентность;PATCH: изменить часть ресурса.
Где спотыкаются
Смешивают безопасность и идемпотентность в одно свойство. PUT не безопасный, он меняет данные, но идемпотентный: сколько раз ни отправь одно и то же тело, состояние будет одинаковым.
Записывают PATCH в идемпотентные. Замена значения поля идемпотентна, а операция «увеличить счётчик» нет, и спецификация идемпотентности от метода не требует.
Думают, что предварительный запрос надо отправлять руками или что его можно отключить на клиенте. Его делает браузер, а чинится он на сервере: обработкой метода OPTIONS и правильными заголовками ответа, включая список разрешённых заголовков и методов.