Une URL est-elle http://example.com/foo?bar
valide?
Je cherche un lien vers quelque chose d'officiel qui dit d'une manière ou d'une autre. Une simple réponse oui / non ou des preuves anecdotiques ne suffiront pas.
Une URL est-elle http://example.com/foo?bar
valide?
Je cherche un lien vers quelque chose d'officiel qui dit d'une manière ou d'une autre. Une simple réponse oui / non ou des preuves anecdotiques ne suffiront pas.
Réponses:
La RFC URI n'impose pas de format pour la chaîne de requête. Bien qu'il soit reconnu que la chaîne de requête portera souvent des paires nom-valeur, ce n'est pas obligatoire (par exemple, elle contiendra souvent un autre URI).
3.4. Requete
Le composant de requête contient des données non hiérarchiques qui, avec les données du composant de chemin (section 3.3), servent à identifier une ressource dans la portée du schéma de l'URI et de l'autorité de dénomination (le cas échéant). ...
... Cependant, comme les composants de requête sont souvent utilisés pour transporter des informations d'identification sous la forme de paires "clé = valeur" et qu'une valeur fréquemment utilisée est une référence à un autre URI, ...
HTML établit qu'un formulaire soumis via HTTP GET doit encoder les valeurs du formulaire sous la forme de paires nom-valeur sous la forme "? Key1 = value1 & key2 = value2 ..." (correctement encodées). L'analyse de la chaîne de requête dépend du code côté serveur (par exemple, le moteur de servlet Java).
Vous n'identifiez pas quel framework côté serveur vous utilisez, le cas échéant, mais il est possible que votre framework côté serveur puisse supposer que la chaîne de requête sera toujours dans des paires nom-valeur et il peut s'étouffer avec une chaîne de requête qui ne l'est pas dans ce format (par exemple ?bar
). S'il s'agit de votre propre code personnalisé analysant la chaîne de requête, vous devez simplement vous assurer de gérer ce format de chaîne de requête. S'il s'agit d'un framework, vous devrez consulter votre documentation ou simplement le tester pour voir comment il est géré.
isindex
magie name
de HTML5 permet d'envoyer une chaîne de requête sans format clé-valeur stackoverflow.com/a/37579004/895245
Ils sont parfaitement valables. Vous pourriez les considérer comme l'équivalent du grand type musclé se tenant silencieusement derrière le messager de la foule. Le gars n'a pas de nom et ne parle pas, mais sa simple présence transmet des informations.
"Le schéma" http "est utilisé pour localiser les ressources réseau via le protocole HTTP. Cette section définit la syntaxe et la sémantique spécifiques au schéma pour les URL http." http://www.w3.org/Protocols/rfc2616/rfc2616.html
http_URL = "http:" "//" host [ ":" port ] [ abs_path [ "?" query ]]
Alors oui, tout est valide après un point d'interrogation. Votre serveur peut interpréter différemment, mais de manière anecdotique , vous pouvez voir que certaines langues traitent cela comme une valeur booléenne qui est vraie si elle est répertoriée.
La seule partie pertinente de la spécification URI est de tout savoir entre le premier ?
et le premier qui #
correspond à la définition d'une requête de la spécification. Il peut inclure des caractères tels que [:/.?]
. Cela signifie qu'une chaîne de requête telle que ?bar
ou ?ten+green+apples
est valide.
Trouvez la RFC 3986 ici
isindex
n'est pas vraiment HTML5.
Il est fourni obsolète pour être utilisé comme premier élément d'un formulaire uniquement et se soumet sans nom.
Si le nom de l'entrée est "isindex", son type est "text", et il s'agit de la première entrée du jeu de données du formulaire, puis ajoutez la valeur au résultat et ignorez le reste des sous-étapes pour cette entrée, en passant à la suivante le cas échéant, ou l'étape suivante de l'algorithme global dans le cas contraire.
L'indicateur isindex est uniquement destiné à un usage hérité. Les formulaires dans les documents HTML conformes ne généreront pas de charges utiles qui doivent être décodées avec cet ensemble d'indicateurs.
La dernière prise en charge d'isindex était HTML3 . Son utilisation en HTML5 est de fournir une compatibilité ascendante plus facile.
La prise en charge dans les bibliothèques de ce format d'URI varie, mais certaines bibliothèques fournissent une prise en charge héritée pour faciliter l'utilisation de isindex
.
Certaines bibliothèques comme l'URI de Perl fournissent des méthodes d'analyse de ce type de structures
$uri->query_keywords
$uri->query_keywords( $keywords, ... )
$uri->query_keywords( \@keywords )
Sets and returns query components that use the keywords separated by "+" format.
url
(pas de support spécial)Comme autre exemple beaucoup plus fréquent, node.js
prend la route normale et facilite l'analyse en tant que
parseQueryString
)La plupart des autres API d'analyse d'URI suivent quelque chose de similaire.
parse_url
, suit une implémentation similaire mais ne renvoie que la chaîne de la requête. Analyse dans un objet de k=>v
requiertparse_string()
Il est valide: voir Wikipedia , RFC 1738 (3.3. HTTP) , RFC 3986 (3. Composants de syntaxe) .
isindex
magie obsolète name
de HTML5
Cette fonctionnalité obsolète permet à une soumission de formulaire de générer une telle URL, fournissant une preuve supplémentaire qu'elle est valide pour HTML. Par exemple:
<form action="#isindex" class="border" id="isindex" method="get">
<input type="text" name="isindex" value="bar"/>
<button type="submit">Submit</button>
</form>
génère une URL de type:
?bar
Standard: https://www.w3.org/TR/html5/forms.html#naming-form-controls:-the-name-attribute
isindex
est cependant obsolète comme mentionné à l' adresse : https://stackoverflow.com/a/41689431/895245
Comme toutes les autres réponses décrites, il est parfaitement valide pour la vérification, spécialement pour les trucs de type booléen
Voici une fonction simple pour obtenir la chaîne de requête par nom:
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, " "));
}
et maintenant vous voulez vérifier si la chaîne de requête que vous recherchez existe ou non, vous pouvez faire une chose simple comme:
var exampleQueryString = (getParameterByName('exampleQueryString') != null);
le exampleQueryString
sera false
si la fonction ne trouve pas la chaîne de requête, sinon le sera true
.