2008-11-04 37 views
9

¿Se permite pasar parámetros a una página web a través de la URL (después del signo de interrogación) cuando se utiliza el método POST? Sé que funciona (la mayoría de las veces, de todos modos) porque la aplicación web de mi empresa lo hace a menudo, pero no sé si realmente es compatible con el estándar o si puedo confiar en este comportamiento. Estoy considerando implementar un controlador de solicitudes SOAP que use un parámetro después del signo de interrogación para indicar que es una solicitud SOAP y no una solicitud HTTP normal. La razón para esto es que la aplicación web es una extensión IIS, por lo que se puede acceder a todo a través de la misma URL (por ejemplo: example.com/myisapi.dll?command), por lo que para que se procese la solicitud SOAP, debo especificar eso " comando "parámetro. Existiría un comando genérico para SOAP, no un comando específico para cada acción SOAP, que se especificaría en la solicitud SOAP.Al pasar parámetros en la URL al usar HTTP POST

Básicamente, estoy tratando de integrar la biblioteca Apache Axis2/C en mi aplicación web permitiendo que la aplicación web maneje la solicitud HTTP y luego pase el XML SOAP entrante a Axis2 para su manejo si es una solicitud SOAP. Intuitivamente, no veo ningún motivo por el que esto no funcione, ya que la URL que está publicando es solo una URL arbitraria, en lo que se refiere a todos los componentes ... es el servidor el que da un significado especial a las partes después del signo de interrogación.

Gracias por cualquier ayuda/idea que pueda proporcionar.

Respuesta

6

Comencemos con las cosas simples. Las variables de solicitud HTTP GET provienen del URI. El URI es un recurso solicitado, por lo que cualquier servidor web debe (y apache lo tiene) tiene todo el URI almacenado en alguna variable disponible para los módulos o componentes del servidor de aplicaciones que se ejecutan dentro del servidor web.

Un HTTP POST que es diferente de un http GET es una llamada lógica separada al servidor web, pero todavía define un URI que debe procesar la publicación.Un buen servidor web (apache uno) volverá a hacer que el URI esté disponible para cualquier módulo o servidor de aplicaciones que se ejecute dentro de él, y además pondrá a disposición las variables que se enviaron en los encabezados de POST.

En el punto donde su aplicación toma el control de apache durante una POST debe tener acceso a las variables GET y POST y poder hacer la lógica de control que desee, incluyendo responder con un protocolo SOAP en lugar de HTML.

3

Si está preguntando si es posible enviar parámetros a través de GET y POST en una única solicitud HTTP, la respuesta es "SÍ". Esta es una funcionalidad estándar que se puede utilizar de manera confiable AFAIK.

Un ejemplo de esto es enviar credenciales de autenticación en dos partes, una sobre GET y la otra a través de POST para que cualquier intento de secuestro de una sesión requiera el secuestro de las variables GET y POST.

Por lo tanto, en su caso, puede usar POST para contener la solicitud SOAP real pero probar si se trata de una solicitud SOAP basada en el parámetro aprobado en GET (o en otras palabras, a través de la URL).

+0

Sé que esta es una publicación muy antigua, pero a veces en la autenticación, las credenciales no deben incluirse en la solicitud uri [enlace] (https://tools.ietf.org/html/rfc6749#section-2.3.1) . Intentando averiguar por qué ... – martin

2

Implementé una aplicación web con 3 (un operador de red móvil) en el Reino Unido. Originalmente usaba parámetros POST, pero la puerta de enlace 3 los despojaba (¡y los encabezados X también!). Así que ten cuidado ...

2

permitido? Claro, es factible, pero me estoy inclinando hacia la especificación que sugiere que los métodos duales no se supone que necesariamente sucedan, o que no sean compatibles. RFC2616 define HTTP/1.1, y yo diría que sugiere solo un método por solicitud. si se piensa en su transacción HTTP típica desde el lado del cliente, se puede ver la limitación así:

$ telnet localhost 80 
POST /page.html?id=5 HTTP/1.1 
host: localhost 

como se puede ver, sólo se puede utilizar un método (POST/GET, etc ...), sin embargo, debido a la naturaleza de cómo funcionan varios idiomas, pueden seleccionar la cadena de consulta y asignarla a la variable GET. finalmente, esta es una solicitud POST, y no un GET.

básicamente, esta funcionalidad existe, ¿está prevista? Diría no.

+0

Su ejemplo es exactamente de lo que estoy hablando ... una solicitud POST donde la URL incluye algunos parámetros después del signo de interrogación. Depende del servidor determinar si funciona o no, ¿verdad? Si es así, sé que funciona en IIS, entonces puedo confiar en él, ¿verdad? – rmeador

+0

@Owen: nadie sugirió tener dos métodos, por lo que puedo ver, solo tener parámetros en la URL POST. No hay nada de malo en eso. –

+0

@Jon: sí, estoy de acuerdo. @ rmeador: creo que la confusión puede ser quién maneja qué. es decir, el servidor maneja el método (POST/GET), maneja el lenguaje analizando la parte de búsqueda de una URL (preocupación separada). siempre que su * idioma * lo soporte, no debería ser un problema. – Owen

3

Creo que ningún estándar realmente define el concepto de "parámetros HTTP" o "variables de solicitud". RFC 1738 define que una URL puede tener una "parte de búsqueda", que es la subcadena después del signo de interrogación. HTML especifica en el protocolo de envío de formularios cómo un navegador que procesa un elemento FORM debe enviarlo. En cualquier caso, la forma en que el servidor procesa tanto la parte de búsqueda como el cuerpo de HTTP depende por completo del servidor; descartar ambos sería conforme a estas dos especificaciones (pero bastante inútil).

Para determinar si puede publicar una pieza de búsqueda en un servicio específico, debe estudiar la especificación del protocolo de este servicio. Si el servicio está prácticamente definido por medio de un formulario HTML, no puede usar una mezcla, ni siquiera puede usar POST si el FORMULARIO especifica GET (y viceversa). Si publica en un servicio web, debe consultar el WSDL del servicio web, que normalmente exigirá POST; con todos los datos en un mensaje SOAP. Etc.

Los marcos web específicos pueden tener la noción de "variables de solicitud": si dibujarán estas variables tanto desde una parte de búsqueda como desde un cuerpo de solicitud, deberá encontrarla en la documentación del producto.

Cuestiones relacionadas