Запрос POST, обсуждаемый в этой статье, является одним из наиболее часто используемых среди многих методов запроса HTTP, указанных в протоколе HTTP/1.1. Как правило, метод POST-запроса используется для отправки данных на сервер (в основном некоторые операции создания и обновления).В этой статье рассматриваются четыре формата отправки данных, обычно используемые методом POST-запроса.
Поскольку в протоколе HTTP/1.1 не указано, какой метод кодирования использовать для запроса, теоретически разработчики могут полностью решить, какой формат должен использовать тело запроса. , Данные (экология имеет решающее значение).
Примечание. Следующие рейтинги расположены в произвольном порядке. . .
application/x-www-form-urlencoded
Для собственной формы браузера, если значение enctype не указано, по умолчанию используется этот парень. Фактически, его можно использовать в большинстве случаев, метод кодирования достаточно прост и эффективен, а поддержка является полной во всех аспектах, таких как основные инструменты отладки браузера, основное программное обеспечение для захвата пакетов и т. д.
POST http://www.example.com HTTP/1.1
Content-Type: application/x-www-form-urlencoded;charset=utf-8
key1=val1&key2=val2
Базовый запрос аналогичен приведенному выше: метод кодирования данных имеет форму key1=val1&key2=val2, а пары ключ-значение в нем необходимо кодировать с помощью URL Encode. Фактически формат отправки данных запроса GET такой же, но местоположение изменено с URL-адреса запроса на тело запроса.
Этот формат прост по структуре, но для случая глубокой иерархии данных, например, некоторых интерфейсных данных со сложной иерархической взаимосвязью, этот метод кажется немного бессильным. С другой стороны, для двоичных данных (таких как изображения, аудиофайлы и т. д.), которые необходимо загрузить, этот метод не так эффективен, а для данных, отличных от ASCII, он теряется, поэтому этот метод нельзя использовать, когда передача файлов.
Применимые сценарии: этот формат представления данных настоятельно рекомендуется, когда объем данных невелик и уровень данных невелик.
multipart/form-data
Используйте этот метод отправки, когда вам нужно отправить файлы, данные, отличные от ASCII, или данные двоичного потока. Аналогично следующему примеру запроса:
POST http://www.example.com HTTP/1.1
Content-Type:multipart/form-data; boundary=----WebKitFormBoundaryPAlLG7hJKNYc4ft3
------WebKitFormBoundaryrGKCBY7qhFd3TrwA
Content-Disposition: form-data; name="text"
demo
------WebKitFormBoundaryPAlLG7hJKNYc4ft3
Content-Disposition: form-data; name="file"; filename="demo.png"
Content-Type: image/png
------WebKitFormBoundaryPAlLG7hJKNYc4ft3--
Во второй строке указывается, что метод кодирования Content-Type — multipart/form-data, а затем генерируется граница, а именно----WebKitFormBoundaryPAlLG7hJKNYc4ft3, вонючая и длинная цель - избежать конфликта с содержимым тела, а его роль - разделить разные поля.
Тело разделено на несколько конструктивно сходных частей, каждая из которых начинается с--boundaryв начале, потому что граница, сгенерированная этим запросом,----WebKitFormBoundaryPAlLG7hJKNYc4ft3, так что в конечном итоге------WebKitFormBoundaryPAlLG7hJKNYc4ft3. Затем следует метаинформация, описывающая содержимое, включая имена полей, а в случае файлов — имя файла и тип файла. Затем оставьте пустую строку, а затем значение поля. Когда это закончится?--boundary--Конец знака.
Этот метод предназначен длязагрузить файлыХотя вы также можете использовать этот метод для передачи обычных данных, он, несомненно, увеличит размер множества пакетов данных (так много границ все еще занимают много места).
Применимые сценарии: загрузка файла.
application/json
Очевидно, что до того, как формат JSON стал популярным, такого быть не должно, как было сказано ранее, не существует жесткого правила о том, какой метод использовать для отправки данных, поэтому после того, как формат JSON стал популярным, особенно с его отличными данными способность к выражению структуры постепенно стала популярной, теперь мы с ней полностью знакомы.
POST http://www.example.com HTTP/1.1
Content-Type: application/json;charset=utf-8
{"name":"xfly","age": 24, "hobby":["x","xx","xxx"]}
Применимые сценарии: структура данных сложная, а иерархия глубокая.