Название в значительной степени суммирует его. Многие веб-языки поддерживают отправку/получение URL-адресов GET-параметров в POST-запросах. Является ли это приемлемой практикой для стандарта HTTP?Какова позиция W3C при отправке параметров GET в запрос POST?
ответ
Насколько HTTP обеспокоен, нет такого понятия, как «GET параметра». URL-адрес идентифицирует ресурс , и вы можете выполнять различные действия на этом ресурсе, включая GET
ting it, и POST
данные на нем. Идентификация ресурса как https://api.example.com/item?id=42
и выполнение запроса POST
, чтобы обновить этот элемент, совершенно верны с этой точки зрения. Его вполне можно использовать в так называемом «RESTful API», хотя чаще всего предпочтительным будет динамический URL-адрес, такой как https://api.example.com/item/42
.
Причина строка запроса часть URL иногда рассматривается как «GET параметры», потому что это часть генерируется при отправке формы в HTML использованием method="get"
. Форма может иметь URL-адрес action
с уже прикрепленной строкой запроса и method
, в которой указано, что данные должны быть отправлены на этот URL с запросом POST
. Наличие существующей строки запроса и method
из "get"
приводит к тому, что браузеру необходимо точно определить, как объединить эти два, но строка запроса + «сообщение» не конфликтует.
Наконец, страница, которую вы отправляете, должна будет фактически обрабатывать ваши данные. Многие простые библиотеки CGI объединит переменные, проанализированные из строки запроса, и из предоставленной формы POST. Это может быть то, что вы хотите, или вы можете рассматривать их как два отдельных «пространства имен». Например, PHP допускает оба подхода, предоставляя $_GET
(переменные строки запроса, независимо от метода HTTP) и $_POST
(данные формы POSTed), а также $_REQUEST
, который объединяет эти два в настраиваемом виде.
В соответствии со спецификацией - это допускается:
Request-Line = Method SP Request-URI SP HTTP-Version CRLF
Request-URI = "*" | absoluteURI | abs_path | authority
absoluteURI = scheme ":" (hier_part | opaque_part)
hier_part = (net_path | abs_path) [ "?" query ]
Ссылки:
Отправка параметров визави POST in url-encoded format не только разрешено, это the default for encoding POST data. Чтобы процитировать SPECT для HTML форм:
ENCTYPE = Content-Type [ДИ] Этот атрибут определяет тип содержимого, используемый для отправки формы на сервер (когда значение метода является «пост»). Значением по умолчанию для этого атрибута является «application/x-www-form-urlencoded». Значение «multipart/form-data» должно использоваться в комбинации с элементом INPUT, type = «file».
Конечно, это имеет смысл. Например, POST/items? Id = 50' может опубликовать некоторую информацию по пункту 50.Если идентификатор имеет значение за пределами данных, которые вы хотите опубликовать, это фактически делает * больше * смысла иметь его в URL-адресе, IMO. – cHao
Параметры запроса в URL-адресе иногда называются «параметрами GET», потому что они почти всегда используются в запросах GET - они являются единственным универсальным способом отправки информации через GET. (Не все API-интерфейсы позволяют указывать файлы cookie, меньше разрешено устанавливать настраиваемые заголовки, и очень немногие позволяют включать тело.) – cHao
@cHao: Да, вы правы, спасибо. Я удалил эту часть. Это должно быть достаточно полезным в качестве ответа, что url-кодирование разрешено и по умолчанию передавать данные через POST. – Carsten
- 1. НЕ поддерживает http GET при отправке POST
- 2. POST преобразуется в GET, при отправке запроса через локальный apache
- 3. Добавление параметров в запрос GET
- 4. Triggering GET метод при отправке формы при заданном методе POST
- 5. commons httpclient - Добавление параметров строки запроса в запрос GET/POST
- 6. W3C геолокация, ошибка: позиция недоступна
- 7. Post метод действует как метод GET При отправке формы
- 8. Запрос на перекрестный запрос Заблокирован при отправке POST на api
- 9. Передача параметров в запрос GET
- 10. POST Запрос параметров Loss
- 11. Запрос POST считается GET
- 12. Группировка параметров при отправке формы
- 13. Запрос HTTP POST преобразуется в запрос GET
- 14. org.springframework.http.converter.HttpMessageNotReadableException при отправке запроса POST
- 15. Добавление параметров в действие формы при отправке
- 16. Ошибка при отправке запроса POST
- 17. Неверный запрос при отправке POST/сообщений в Let's Chat API
- 18. Передача параметров при отправке почты
- 19. Проверьте запрос GET или POST
- 20. GET Запрос после POST (логин)
- 21. Python Flask POST/GET запрос
- 22. Arduino POST vs GET-запрос
- 23. Запрос WebApi POST обрабатывается GET
- 24. POST, а затем запрос GET
- 25. Проверьте запрос Get и Post
- 26. Почему я получаю запрос GET на стороне django при отправке запроса POST с суперагентом
- 27. POST Переменная Потеряна при отправке
- 28. Запрос пароля при отправке
- 29. Добавление параметров для отдыха GET-запрос
- 30. Запрос POST, обработанный как запрос GET
Это не канонический ответ любым способом, но я думаю, что в отношении HTTP, «параметры GET» являются частью строки URL и не имеют никакого внутреннего смысла. Практика смешивания жестко заданных параметров строки запроса в HTML-формах (с установленными методами GET или POST) и их поведение в CGI может быть покрыта некоторыми другими стандартами или советами, я думаю. – IMSoP