¿Es http://example.com/foo?bar
válida una url ?
Estoy buscando un enlace a algo oficial que dice de una manera u otra. Una respuesta simple de sí / no o evidencia anecdótica no será suficiente.
¿Es http://example.com/foo?bar
válida una url ?
Estoy buscando un enlace a algo oficial que dice de una manera u otra. Una respuesta simple de sí / no o evidencia anecdótica no será suficiente.
Respuestas:
El URI RFC no exige un formato para la cadena de consulta. Aunque se reconoce que la cadena de consulta a menudo llevará pares de nombre-valor, no es necesario (por ejemplo, a menudo contendrá otro URI).
3.4. Consulta
El componente de consulta contiene datos no jerárquicos que, junto con los datos en el componente de ruta (Sección 3.3), sirven para identificar un recurso dentro del alcance del esquema y la autoridad de denominación del URI (si corresponde). ...
... Sin embargo, como los componentes de consulta a menudo se usan para llevar información de identificación en forma de pares "clave = valor" y un valor usado frecuentemente es una referencia a otro URI, ...
HTML establece que un formulario enviado a través de HTTP GET debe codificar los valores del formulario como pares de nombre-valor en el formulario "? Key1 = value1 & key2 = value2 ..." (codificado correctamente). El análisis de la cadena de consulta depende del código del lado del servidor (por ejemplo, el motor de servlet de Java).
No identifica qué marco del lado del servidor usa, si lo hay, pero es posible que su marco del lado del servidor pueda asumir que la cadena de consulta siempre estará en pares de nombre-valor y puede ahogarse en una cadena de consulta que no sea en ese formato (por ejemplo ?bar
). Si es su propio código personalizado que analiza la cadena de consulta, simplemente debe asegurarse de manejar ese formato de cadena de consulta. Si es un marco, deberá consultar su documentación o simplemente probarla para ver cómo se maneja.
isindex
magia name
de HTML5 permite enviar una cadena de consulta sin formato de clave-valor stackoverflow.com/a/37579004/895245
Son perfectamente válidos. Podrías considerarlos como el equivalente del gran hombre musculoso parado en silencio detrás del mensajero de la mafia. El tipo no tiene nombre y no habla, pero su mera presencia transmite información.
"El esquema" http "se utiliza para localizar recursos de red a través del protocolo HTTP. Esta sección define la sintaxis y la semántica específicas del esquema para las URL http". http://www.w3.org/Protocols/rfc2616/rfc2616.html
http_URL = "http:" "//" host [ ":" port ] [ abs_path [ "?" query ]]
Entonces sí, cualquier cosa es válida después de un signo de interrogación. Su servidor puede interpretar de manera diferente, pero de manera anecdótica , puede ver que algunos idiomas lo tratan como un valor booleano que es verdadero si se enumera.
La única parte relevante de la especificación de URI es saber todo entre el primero ?
y el primero se #
ajusta a la definición de especificación de una consulta. Puede incluir cualquier personaje como [:/.?]
. Esto significa que una cadena de consulta como ?bar
, o ?ten+green+apples
es válida.
Encuentra el RFC 3986 aquí
isindex
no es significativamente HTML5.
Se proporciona en desuso para su uso como primer elemento solo en un formulario y se envía sin nombre.
Si el nombre de la entrada es "isindex", su tipo es "text", y esta es la primera entrada en el conjunto de datos del formulario, luego agregue el valor resultante y omita el resto de los subpasos para esta entrada, pasando a la siguiente entrada, si existe, o el siguiente paso en el algoritmo general de lo contrario.
El indicador isindex es solo para uso heredado. Los formularios para conformar documentos HTML no generarán cargas útiles que deban decodificarse con este conjunto de indicadores.
La última vez que se admitió isindex fue HTML3 . Su uso en HTML5 es para proporcionar una compatibilidad con versiones anteriores más fácil.
El soporte en las bibliotecas para este formato de URI varía, sin embargo, algunas bibliotecas proporcionan soporte heredado para facilitar su uso isindex
.
Algunas bibliotecas como el URI de Perl proporcionan métodos para analizar este tipo de estructuras.
$uri->query_keywords
$uri->query_keywords( $keywords, ... )
$uri->query_keywords( \@keywords )
Sets and returns query components that use the keywords separated by "+" format.
url
(sin soporte especial)Como otro ejemplo mucho más frecuente, node.js
toma la ruta normal y facilita el análisis como
parseQueryString
)La mayoría de las otras API de análisis de URI siguen algo similar a esto.
parse_url
, sigue una implementación similar pero solo devuelve la cadena para la consulta. Analizar en un objeto de k=>v
requiereparse_string()
Es válido: ver Wikipedia , RFC 1738 (3.3. HTTP) , RFC 3986 (3. Componentes de sintaxis) .
isindex
magia obsoleta name
de HTML5
Esta característica en desuso permite que el envío de un formulario genere dicha URL, lo que proporciona más evidencia de que es válido para HTML. P.ej:
<form action="#isindex" class="border" id="isindex" method="get">
<input type="text" name="isindex" value="bar"/>
<button type="submit">Submit</button>
</form>
genera una URL de tipo:
?bar
Estándar: https://www.w3.org/TR/html5/forms.html#naming-form-controls:-the-name-attribute
isindex
Sin embargo, está en desuso como se menciona en: https://stackoverflow.com/a/41689431/895245
Como se describe en todas las demás respuestas, es perfectamente válido para verificar, especialmente para cosas de tipo booleano
Aquí hay una función simple para obtener la cadena de consulta por nombre:
function getParameterByName(name, url) {
if (!url) {
url = window.location.href;
}
name = name.replace(/[\[\]]/g, "\\$&");
var regex = new RegExp("[?&]" + name + "(=([^&#]*)|&|#|$)"),
results = regex.exec(url);
if (!results) return null;
if (!results[2]) return '';
return decodeURIComponent(results[2].replace(/\+/g, " "));
}
y ahora desea verificar si la cadena de consulta que está buscando existe o no, puede hacer algo simple como:
var exampleQueryString = (getParameterByName('exampleQueryString') != null);
la exampleQueryString
habrá false
si la función no puede encontrar la cadena de consulta, de lo contrario será true
.