Полезные нагрузки методов HTTP-запроса - PullRequest
65 голосов
/ 06 мая 2011

В записи Википедии по HTTP перечислены следующие методы HTTP-запроса:

  • HEAD: Запрашивает ответ, идентичный ответу, который соответствуетзапрос GET, но без тела ответа.
  • GET: Запрашивает представление указанного ресурса.
  • POST: Отправляет данные вобрабатывается (например, из HTML-формы) на указанный ресурс.Данные включены в тело запроса.
  • PUT: Загружает представление указанного ресурса.
  • DELETE: Удаляет указанноересурс.
  • TRACE: Возвращает полученный запрос, чтобы клиент мог видеть, какие изменения (или изменения) были внесены промежуточными серверами.
  • ОПЦИИ: Возвращает методы HTTP, которые сервер поддерживает для указанного URL.Это можно использовать для проверки работоспособности веб-сервера, запрашивая «*» вместо определенного ресурса.
  • CONNECT: Преобразует соединение запроса в прозрачный туннель TCP / IP, обычнодля упрощения связи с шифрованием SSL (HTTPS) через незашифрованный прокси-сервер HTTP.
  • PATCH: Используется для частичного изменения ресурса.

I 'Мне интересно знать (особенно в отношении первых пяти методов):

  • , какой из этих методов может (должен?) получать полезные нагрузки
    • из методов, которые могут получать полезные данные, как они получают это?
      • через строку запроса в URL?
      • через тело в кодировке URL?
      • через raw /кусок тела?
      • через комбинацию ([все / некоторые] из) вышеупомянутого?

Я ценю весь ввод,если бы вы могли поделиться некоторым (желательно легким) чтением, это тоже было бы здорово!

Ответы [ 3 ]

83 голосов
/ 08 мая 2011

Вот краткое изложение RFC 7231 , обновленная версия ссылки @ Darrel опубликовано:

  • HEAD -Нет определенной семантики тела.
  • GET - Нет определенной семантики тела.
  • PUT - Поддерживается тело.
  • POST - Тело поддерживается.
  • УДАЛИТЬ - Нет определенной семантики тела.
  • TRACE - Тело не поддерживается.
  • ОПЦИИ - Поддерживается тело, но нет семантики при использовании (возможно, в будущем).
  • CONNECT - Нет определенной семантики тела

Как уже упоминалось @ John , все методы запроса поддерживают строки запроса в URL (одним заметным исключением может быть OPTIONS , которое только кажется полезным [в моих тестах], если URL-адрес HOST/*).

Я не тестировал методы CONNECT и PATCH , так как я не заинтересован в них ATM.

28 голосов
/ 06 мая 2011

RFC 7231 , семантика и контент HTTP 1.1, является самым современным и авторитетным источником по семантике методов HTTP. Эта спецификация говорит, что нет никакого определенного значения для полезной нагрузки, которая может быть включена в сообщение GET, HEAD, OPTIONS или CONNECT. В разделе 4.3.8 говорится, что клиент не должен отправлять тело для запроса TRACE. Таким образом, только TRACE не может иметь полезную нагрузку, но GET, HEAD, OPTIONS и CONNECT, вероятно, не будут, и сервер не будет знать, как его обработать, если клиент отправит один (то есть может игнорировать его). *

Если вы считаете, что что-то неоднозначно, то есть список рассылки , где вы можете высказать свои опасения.

3 голосов
/ 06 мая 2011

Я почти уверен, что не ясно, могут ли запросы GET иметь полезную нагрузку.GET-запросы обычно публикуют данные формы через строку запроса, то же самое для HEAD-запросов.HEAD по сути GET - за исключением того, что ему не нужно тело ответа.

(Примечание: я не уверен, потому что запрос GET может технически перейти на другой протокол; фактически, версия websockets простоэто, и хотя некоторые прокси-программы работали с ним нормально, другие подавляли рукопожатие.)

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

Для получения дополнительной (и более подробной) информации я бы нажал фактическую HTTP / 1.1.спецификации .

...