2014-04-03 3 views
1

Название в значительной степени суммирует его. Многие веб-языки поддерживают отправку/получение URL-адресов GET-параметров в POST-запросах. Является ли это приемлемой практикой для стандарта HTTP?Какова позиция W3C при отправке параметров GET в запрос POST?

+0

Это не канонический ответ любым способом, но я думаю, что в отношении HTTP, «параметры GET» являются частью строки URL и не имеют никакого внутреннего смысла. Практика смешивания жестко заданных параметров строки запроса в HTML-формах (с установленными методами GET или POST) и их поведение в CGI может быть покрыта некоторыми другими стандартами или советами, я думаю. – IMSoP

ответ

2

Насколько 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, который объединяет эти два в настраиваемом виде.

0

Отправка параметров визави 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».

+0

Конечно, это имеет смысл. Например, POST/items? Id = 50' может опубликовать некоторую информацию по пункту 50.Если идентификатор имеет значение за пределами данных, которые вы хотите опубликовать, это фактически делает * больше * смысла иметь его в URL-адресе, IMO. – cHao

+0

Параметры запроса в URL-адресе иногда называются «параметрами GET», потому что они почти всегда используются в запросах GET - они являются единственным универсальным способом отправки информации через GET. (Не все API-интерфейсы позволяют указывать файлы cookie, меньше разрешено устанавливать настраиваемые заголовки, и очень немногие позволяют включать тело.) – cHao

+0

@cHao: Да, вы правы, спасибо. Я удалил эту часть. Это должно быть достаточно полезным в качестве ответа, что url-кодирование разрешено и по умолчанию передавать данные через POST. – Carsten

Смежные вопросы