В чем фактическая разница между различными методами HTTP-запроса, помимо семантики?

Я читал много дискуссий по этому поводу, например, тот факт, что PUT является идемпотентным, а POST — нет, и т. д. Однако не зависит ли это в конечном счете от того, как реализован сервер? Разработчик всегда может построить внутренний сервер таким образом, чтобы запрос PUT не был идемпотентным и создавал несколько записей для нескольких запросов. Разработчик также может создать конечную точку для запроса PUT, чтобы он действовал как запрос DELETE и удалял запись в базе данных.

Итак, мой вопрос: учитывая, что мы не принимаем во внимание какой-либо код на стороне сервера, есть ли реальная разница между методами HTTP? Например, GET и POST имеют реальные различия в том, что вы не можете отправить тело с помощью запроса GET, но можете отправить тело с помощью запроса POST. Кроме того, насколько я понимаю, запросы GET обычно кэшируются по умолчанию в большинстве браузеров.

Являются ли методы HTTP-запроса чем-то большим, чем просто логическая структура (семантика), чтобы разработчики могли «ожидать» определенного поведения в зависимости от типа отправляемого нами HTTP-запроса?


person Ryn    schedule 16.01.2020    source источник


Ответы (2)


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

Например, какой-то компонент может воспользоваться тем фактом, что PUT является идемпотентным, и, таким образом, может повторить попытку, а POST — нет.

person Julian Reschke    schedule 16.01.2020

Протокол передачи гипертекста (HTTP) предназначен для обеспечения связи между клиентами и серверами.

HTTP работает как протокол запроса-ответа между клиентом и сервером.

Веб-браузер может быть клиентом, а приложение на компьютере, на котором размещен веб-сайт, может быть сервером.

Пример: клиент (браузер) отправляет HTTP-запрос на сервер; затем сервер возвращает ответ клиенту. Ответ содержит информацию о состоянии запроса, а также может содержать запрошенное содержимое.

HTTP-методы

ПОЛУЧИТЬ

ПОЧТА

ПОМЕЩАТЬ

ГЛАВА

УДАЛИТЬ

ПЛАСТЫРЬ

ОПЦИИ

Метод ПОЛУЧИТЬ

GET используется для запроса данных из указанного ресурса.

GET — один из самых распространенных методов HTTP.

Обратите внимание, что строка запроса (пары имя/значение) отправляется в URL-адресе запроса GET.

Метод POST

POST используется для отправки данных на сервер для создания/обновления ресурса.

Данные, отправленные на сервер с помощью POST, хранятся в теле запроса HTTP.

POST — один из самых распространенных методов HTTP.

Метод PUT

PUT используется для отправки данных на сервер для создания/обновления ресурса.

Разница между POST и PUT заключается в том, что запросы PUT являются идемпотентными. То есть, вызов одного и того же запроса PUT несколько раз всегда будет давать один и тот же результат. Напротив, повторный вызов POST-запроса имеет побочные эффекты многократного создания одного и того же ресурса.

ГОЛОВНОЙ метод

HEAD почти идентичен GET, но без тела ответа.

Другими словами, если GET /users возвращает список пользователей, то HEAD /users сделает тот же запрос, но не вернет список пользователей.

Запросы HEAD полезны для проверки того, что вернет запрос GET, перед фактическим выполнением запроса GET — например, перед загрузкой большого файла или тела ответа.

Метод УДАЛИТЬ

Метод DELETE удаляет указанный ресурс.

Метод ОПЦИИ

Метод OPTIONS описывает параметры связи для целевого ресурса.

источник w3schools

person Shashidhar Reddy    schedule 16.01.2020