Al enviar un formulario GET, la cadena de consulta se elimina de la URL de acción
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 GET
formulario, los parámetros a
y b
están desapareciendo.
¿Hay alguna razón para eso?
¿Hay alguna forma de evitar este comportamiento?
¿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.
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/s
URI 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 unU+003F
cará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.