POST (HTTP) - POST (HTTP)
HTTP |
---|
Способы запроса |
Поля заголовка |
Коды состояния |
Методы контроля доступа безопасности |
Уязвимости безопасности |
В вычисление, ПОЧТОВЫЙ это метод запроса при поддержке HTTP используется Всемирная паутина. По замыслу, метод запроса POST требует, чтобы веб-сервер принял данные, заключенные в теле сообщения запроса, скорее всего, для их хранения.[1] Часто используется при загрузке файла или при отправке заполненного веб-форма.
Напротив, HTTP ПОЛУЧАТЬ Метод запроса получает информацию с сервера. В рамках запроса GET некоторые данные могут быть переданы в URL-адресе Строка запроса, указав (например) условия поиска, диапазоны дат или другую информацию, определяющую запрос.
В рамках запроса POST произвольный объем данных любого типа может быть отправлен на сервер в теле сообщения запроса. А поле заголовка в запросе POST обычно указывает тип Интернет-носителя тела сообщения.
Публикация данных
Всемирная паутина и HTTP основаны на нескольких методах запроса или «глаголах», включая POST и GET, а также PUT, DELETE и некоторые другие. Веб-браузеры обычно используют только GET и POST, но RESTful онлайн Программы использовать многие другие. Место POST в диапазоне HTTP-методов заключается в отправке представления нового объект данных на сервер, чтобы он был сохранен как новый подчиненный ресурс, идентифицированный URI.[1] Например, для URI http://example.com/customers
, Можно ожидать, что запросы POST будут представлять новых клиентов, каждый из которых включает их имя, адрес, контактные данные и так далее. Первые дизайнеры веб-сайтов держались в стороне от этой оригинальной концепции по двум важным причинам. Во-первых, у URI нет технических причин для текстового описания веб-ресурс в подчинении которого будут храниться данные POST. Фактически, если не приложить никаких усилий, последняя часть URI, скорее всего, будет описывать страницу обработки веб-приложения и ее технологию, например http://example.com/applicationform.php
. Во-вторых, учитывая естественное ограничение большинства веб-браузеров на использование только GET или POST, дизайнеры почувствовали необходимость переназначить POST для выполнения многих других задач по отправке данных и управлению данными, включая изменение существующих записей и их удаление.
Попытки некоторых влиятельных писателей исправить первую проблему начались еще в 1998 году.[2] Фреймворки веб-приложений Такие как Рубин на рельсах и другие упрощают разработчикам задачу предоставления пользователям семантические URL-адреса. Что касается второго пункта, то можно использовать клиентские сценарии или для написания автономных приложений, чтобы использовать другие методы HTTP, где они необходимы,[3] но за пределами этого большинство веб-форм, которые отправляют или изменяют данные сервера, продолжают использовать POST для этой цели.
Это не означает, что каждая веб-форма должна указывать method = "post"
в его открывающий тег. Многие формы используются для более точного определения получения информации с сервера без какого-либо намерения изменять основную базу данных. Например, формы поиска идеально подходят для метод = "получить"
указано.[4]
Бывают случаи, когда HTTP GET менее подходит даже для извлечения данных. Примером этого является ситуация, когда в URL-адресе необходимо указать большой объем данных. Браузеры и веб-серверы могут иметь ограничения на длину URL-адреса, который они будут обрабатывать без усечения или ошибок. Процентное кодирование зарезервированных символов в URL-адресах и строках запроса может значительно увеличить их длину, а HTTP-сервер Apache может обрабатывать до 4000 символов в URL-адресе,[5] Microsoft Internet Explorer может содержать не более 2048 символов в любом URL.[6] Точно так же HTTP GET не должен использоваться, когда конфиденциальная информация, такая как имена пользователей и пароли, должна быть отправлена вместе с другими данными для выполнения запроса. Даже если HTTPS используется, предотвращая перехват данных при передаче, история браузера и журналы веб-сервера, скорее всего, будут содержать полный URL-адрес в виде открытого текста, который может быть раскрыт, если какая-либо система будет взломана. В этих случаях следует использовать HTTP POST.[7]
Использовать для отправки веб-форм
Когда веб-браузер отправляет запрос POST из веб-форма элемент, по умолчанию Тип интернет-СМИ является "приложение / x-www-form-urlencoded ".[8] Это формат для кодирования пары ключ-значение с возможно повторяющимися ключами. Каждая пара «ключ-значение» отделяется символом «&», а каждый ключ отделяется от своего значения знаком «=». Ключи и значения экранируются заменой пробелов символом '+' и последующим использованием процентное кодирование по всем остальным не-буквенно-цифровой[9] символы.
Например, пары "ключ-значение"
Имя: Гарет Вайли, возраст: 24 года, формула: a + b == 13%!
закодированы как
Имя = Гарет + Вайли & Возраст = 24 & Формула = a +% 2B + b +% 3D% 3D + 13% 25% 21
Начиная с HTML 4.0, формы также могут отправлять данные в multipart / form-data как определено в RFC 2388 (Смотрите также RFC 1867 для более ранней экспериментальной версии, определенной как расширение HTML 2.0 и упомянутой в HTML 3.2).
Особый случай POST на той же странице, к которой принадлежит форма, известен как обратная передача.
Влияние на состояние сервера
За RFC 7231, метод POST не идемпотент, что означает, что несколько одинаковых запросов могут не иметь того же эффекта, что и передача запроса только один раз. Таким образом, POST подходит для запросов, которые изменяют государственный каждый раз, когда они выполняются, например, при отправке комментария к сообщению в блоге или голосовании в онлайн-опросе. GET определяется как ничтожный, без побочных эффектов, а идемпотентные операции «не имеют побочных эффектов на второй или будущие запросы».[10][11] По этой причине, поисковые роботы такие как индексаторы поисковых систем обычно используют исключительно методы GET и HEAD, чтобы их автоматические запросы не выполняли такие действия.
Однако есть причины, по которым POST используется даже для идемпотентных запросов, особенно если запрос очень длинный. Из-за ограничений на URL-адреса Строка запроса метод GET может стать очень длинным, особенно из-за процентное кодирование.[10]
Рекомендации
- ^ а б «Протокол передачи гипертекста (HTTP / 1.1): семантика и контент - 4.3.3 POST». Получено 2014-07-24.
Метод POST требует, чтобы целевой ресурс обработал представление, содержащееся в запросе, в соответствии с собственной конкретной семантикой ресурса.
- ^ Бернерс-Ли, Тим (1998). "Классные URI не меняются". W3C. Получено 17 октября 2012.
- ^ Фридман, Майк (2009). «Использование методов HTTP PUT и DELETE в веб-приложениях». Получено 17 октября 2012.
- ^ «Отправка формы». HTML 4.01 Спецификация. W3C. 1999 г.. Получено 17 октября 2012.
- ^ Ригсби, Дэн (2008). «REST и максимальный размер URL». Архивировано из оригинал 4 ноября 2012 г.. Получено 17 октября 2012.
- ^ «Максимальная длина URL-адреса в Internet Explorer составляет 2048 символов». Microsoft.
- ^ «Протокол передачи гипертекста (HTTP / 1.1): семантика и контент - 9.4 Раскрытие конфиденциальной информации в URI». RFC 7231. Получено 2014-07-25.
- ^ Бернерс-Ли, Тим; Коннолли, Дэн (22 сентября 1995 г.). «Язык разметки гипертекста - 2.0 - Формы». Консорциум World Wide Web. Получено 15 января 2011.
- ^ «Формы в HTML-документах».
- ^ а б Корпела, Юкка (28 сентября 2003 г.). «Методы GET и POST в HTML-формах - в чем разница?». Технологический университет Тампере. Получено 15 января 2011.
- ^ RFC 7231, 4.2.1 Безопасные методы
внешняя ссылка
- Прямое определение POST
- Глагол POST в спецификации HTTP
- URI, адресуемость и использование HTTP GET и POST[1]
- ^ «Развертывание хранилища в Google Cloud Platform», Учебное пособие для сертифицированного специалиста по облачным технологиям Google, Wiley, 2019-03-28, стр. 275–308, Дои:10.1002 / 9781119564409.ch12, ISBN 9781119564409