web-dev-qa-db-fra.com

Comment échouer en cas de paramètre d'URI incorrect?

Quel est le moyen d'échec correct lorsque l'utilisateur fournit une valeur incorrecte ou non applicable pour un paramètre de requête?

  1. avec un code d'état HTTP 406 non acceptable et une page décrivant le problème
  2. avec un code d'état HTTP 400 Bad Request et une page décrivant le problème
  3. une page sans code de statut HTTP spécial mais donnant des solutions possibles au problème

Un exemple de paramètre de requête non applicable serait un order=123order=desc ou order=asc sont censés décider de la manière d'imprimer une liste. Donner une valeur non-date à un paramètre qui attend une date formatée pourrait être un autre exemple.

Normalement, les sites agissent simplement comme si la valeur par défaut était donnée, mais cela pourrait poser un problème si quelqu'un se connecte à mon site avec une valeur de paramètre de requête incorrecte et que les moteurs de recherche commencent à l'indexer.

1
Mario

Pour l'UX, il est préférable d'utiliser simplement les valeurs par défaut. Votre cas semble assez rare. Cela a-t-il été un réel problème dans certains cas?

Une solution originale pourrait être la solution 301 moved permanently qui pointe vers l'URL avec la valeur par défaut. Qui serait

  • Résoudre le problème avec les moteurs de recherche.
  • Donne aux utilisateurs un retour direct sur les paramètres incorrects, ce qui améliore encore davantage l'expérience utilisateur.
2
Esa Jokinen

406 serait incorrect, car la norme définit (mine Emphasis):

La ressource identifiée par la requête est uniquement capable de générer des entités de réponse dont les caractéristiques de contenu ne sont pas acceptables selon les en-têtes d'acceptation envoyées dans la requête.

Donc, non, 406 concerne uniquement l'en-tête d'acceptation, pas les paramètres de requête ou quoi que ce soit d'autre.

1
Ulrich Schwarz

Cela dépend de la situation et de la cause de la valeur incorrecte, et il n’existe pas vraiment de solution miracle pour le paramètre de chaîne de requête incorrect.

Dans votre exemple, j'utiliserais 400, car entrer 123 pour commande est une valeur tout à fait inappropriée, mais si le paramètre de requête était incorrect à partir d'un ancien lien pointant toujours sur mon site après avoir modifié la structure de la chaîne de requête, je serais plus enclins à un 301.

Je dirais d'évaluer la cause de la même manière que pour une structure d'URL normale et de ne pas accorder de traitement spécial aux paramètres de la chaîne de requête.

0
Steve Stenzel

En supposant que la valeur par défaut n'est pas mauvaise. Vous pouvez gérer les moteurs de recherche de plusieurs manières:

  • Rediriger pour supprimer les valeurs de paramètre mal formées ou manquantes. Tous les éléments suivants peuvent faire l'objet d'une redirection permanente vers 301 vers /page.html?order=desc:
    • /page.html
    • /page.html?order=
    • /page.html?order=123
  • Utilisez la balise méta canonique sans redirection. Cela indique aux moteurs de recherche quelle URL est la bonne à indexer lorsque plusieurs URL ont un contenu dupliqué. Les moteurs de recherche ne se soucient généralement pas beaucoup de l'ordre des éléments de la page. Vous pouvez donc faire de l'URL canonique la version sans le paramètre order. Toutes vos versions de la page pourraient avoir cela dans le <head>: <link rel="canonical" href="https://example.com/page.html">
  • Utilisez Google Webmaster Tools pour indiquer à Googlebot d’ignorer complètement le paramètre order. Ensuite, lorsque Goooglebot rencontre plusieurs URL qui diffèrent uniquement par ce paramètre, il analyse et n'indexe qu'une seule URL représentative (de son choix) plutôt que toutes. Ce paramètre se trouve sous "Explorer" -> "Paramètres d’URL". Voici la documentation à ce sujet.

Je n'utiliserais aucun code d'état 4xx pour cette situation. Utilisez les redirections 301 ou utilisez les outils fournis par les moteurs de recherche.

0