Передача параметров в URL при использовании HTTP POST
допустимо ли передавать параметры на веб-страницу через URL (после вопросительного знака) при использовании метода POST? Я знаю, что он работает (в большинстве случаев, в любом случае), потому что webapp моей компании делает это часто, но я не знаю, поддерживается ли он в стандарте или я могу положиться на это поведение. Я рассматриваю возможность реализации обработчика запросов SOAP, который использует параметр после вопросительного знака, чтобы указать, что это запрос SOAP, а не обычный HTTP-запрос. Причина для этого webapp является расширением IIS, поэтому доступ ко всему осуществляется по тому же URL-адресу (например: example.com/myisapi.dll?command), поэтому, чтобы получить запрос SOAP для обработки, мне нужно указать этот параметр "command". Будет одна общая команда для SOAP, а не конкретная команда для каждого действия SOAP-они будут указаны в самом запросе SOAP.
в основном, я пытаюсь интегрировать библиотеку Apache Axis2/C в свой webapp, позволяя webapp обрабатывать HTTP запросите, а затем передайте входящий XML SOAP Axis2 для обработки, если это запрос SOAP. Интуитивно я не вижу причин, почему это не сработает, поскольку URL-адрес, на который вы отправляете, является просто произвольным URL-адресом, поскольку это касается всех различных компонентов... это сервер, который придает особое значение частям после вопросительного знака.
Спасибо за любую помощь/понимание вы можете предоставить.
5 ответов
давайте начнем с простых вещей. Переменные запроса HTTP GET поступают из URI. URI является запрошенным ресурсом, и поэтому любой веб-сервер должны (и apache) имеет весь URI, хранящийся в некоторой переменной, доступной для модулей или компонентов appserver, работающих на веб-сервере.
сообщение http, которое отличается от HTTP GET, является отдельным логическим вызовом веб-сервера, но все равно определяет URI, который должен обрабатывать сообщение. Хороший сервер (apache является одним) снова сделает URI доступным для любого модуля или appserver, запущенного в нем, а затем дополнительно сделает доступными переменные, которые были отправлены в заголовках POST.
в точке, где ваше приложение получает контроль от apache во время публикации, вы должны иметь доступ к переменным GET и POST и иметь возможность делать любую логику управления, которую вы хотите, включая ответ с протоколом SOAP вместо HTML.
Если вы спрашиваете, можно ли отправлять параметры через GET и POST в одном HTTP-запросе, то ответ "да". Это стандартная функциональность, которую можно надежно использовать AFAIK.
одним из таких примеров является отправка учетных данных аутентификации в двух частях, один через GET, а другой через POST, так что любая попытка захватить сеанс потребует захвата переменных GET и POST.
поэтому в вашем случае вы можете использовать POST для фактический запрос SOAP, но проверьте, является ли это запросом SOAP на основе параметра, переданного в GET (или, другими словами, через URL).
Я считаю, что никакой стандарт фактически не определяет понятие "параметры HTTP"или" переменные запроса". RFC 1738 определяет, что URL может иметь "часть поиска", которая является подстрокой после вопросительного знака. HTML указывает в протоколе отправки формы, как браузер, обрабатывающий элемент формы, должен отправить его. В любом случае, как серверная сторона обрабатывает как часть поиска, так и тело HTTP полностью зависит от сервера-отбрасывание обоих будет соответствовать этим двум спецификациям (но довольно бесполезно).
чтобы определить, можно ли разместить часть поиска в определенной службе, необходимо изучить спецификацию протокола этой службы. Если служба практически определена с помощью HTML-формы, вы не можете использовать mix - вы даже не можете использовать POST, если форма указывает GET (и наоборот). Если вы публикуете в веб - службе, вам нужно посмотреть на WSDL веб-службы, который обычно будет мандат POST; со всеми данными в сообщении SOAP. Так далее.
конкретные веб-фреймворки могут иметь понятие "переменные запроса" - будут ли они рисовать эти переменные как из части поиска, так и из тела запроса, вам нужно узнать в документации по продукту.
я развернул веб-приложение с 3 (оператор мобильной сети) в Великобритании. Первоначально он использовал параметры POST, но шлюз 3 лишил их (а также X-заголовки!). Так что будьте осторожны...
допустимый? конечно, это выполнимо, но я склоняюсь к спецификации, предполагающей, что двойные методы не обязательно должны происходить или поддерживаться. адресу rfc2616 определяет HTTP / 1.1, и я бы сказал, что предлагает только один метод на запрос. если вы думаете о своей типичной http-транзакции со стороны клиента, вы также можете увидеть ограничение:
$ telnet localhost 80
POST /page.html?id=5 HTTP/1.1
host: localhost
Как вы можете видеть, вы можете использовать только один метод (POST / GET и т. д...), однако из-за характера того, как различные языки работая, они могут забрать строку запроса и назначить ее переменной GET. в конечном счете, это запрос POST, а не GET.
Итак, да эта функциональность существует, она предназначена? я бы сказал нет.