Al enviar un formulario GET, la cadena de consulta se elimina de la URL de acción

Resuelto asked hace 15 años • 0 respuestas

Considere esta forma:

<form action="http://www.blabla.com?a=1&b=2" method="GET">
    <input type="hidden" name="c" value="3" /> 
</form>

Al enviar este GETformulario, los parámetros ay bestán desapareciendo.
¿Hay alguna razón para eso?
¿Hay alguna forma de evitar este comportamiento?

 avatar Jul 12 '09 20:07
Aceptado

¿No es eso para lo que sirven los parámetros ocultos para empezar...?

<form action="http://www.example.com" method="GET">
  <input type="hidden" name="a" value="1" /> 
  <input type="hidden" name="b" value="2" /> 
  <input type="hidden" name="c" value="3" /> 
  <input type="submit" /> 
</form>

No contaría con que ningún navegador conserve ninguna cadena de consulta existente en la URL de acción.

Como indican las especificaciones ( RFC1866 , página 46; HTML 4.x sección 17.13.3):

Si el método es "get" y la acción es un URI HTTP, el agente de usuario toma el valor de la acción y agrega un `?' a él, luego agrega el conjunto de datos del formulario, codificado usando el tipo de contenido "application/x-www-form-urlencoded".

Tal vez uno podría codificar por ciento la URL de acción para incrustar el signo de interrogación y los parámetros, y luego cruzar los dedos para esperar que todos los navegadores dejen esa URL como está (y validar que el servidor también la entienda). Pero nunca confiaría en eso.

Por cierto: no es diferente para los campos de formulario no ocultos. Sin embargo, para POST, la URL de acción podría contener una cadena de consulta.

Arjan avatar Jul 12 '2009 13:07 Arjan

En HTML5, este es un comportamiento según las especificaciones.

Ver Asociación de controles y formularios - Algoritmo de envío de formularios .

Mire "4.10.22.3 Algoritmo de envío de formularios", paso 17. En el caso de un formulario GET a un http/sURI con una cadena de consulta:

Deje que el destino sea una nueva URL que sea igual a la acción, excepto que su <query>componente se reemplaza por una consulta (agregando un U+003Fcarácter de signo de interrogación (?)si corresponde).

Por lo tanto, su navegador eliminará la "?..."parte existente de su URI y la reemplazará por una nueva basada en su formulario.

En HTML 4.01, la especificación produce URI no válidos; aunque la mayoría de los navegadores en realidad no hicieron esto...

Consulte Formularios: procesamiento de datos de formulario , paso cuatro: se agregará un URI ?, incluso si ya contiene uno.

xyphoid avatar Mar 27 '2012 02:03 xyphoid