Question

Dans le passé, plusieurs de mes applications ajax utilisaient la requête GET, mais je commence maintenant à utiliser la requête POST. Les demandes POST semblent être légèrement plus sécurisées et certainement plus conviviales / jolies. Ainsi, je me demande s’il ya une raison pour laquelle je devrais utiliser la requête GET.

Était-ce utile?

La solution

En règle générale, la question est structurée comme suit: Quelque chose d'important change-t-il après la demande? (en dépit de la journalisation). Si tel est le cas, il devrait s'agir d'une requête POST, sinon, d'une requête GET.

Je suis heureux que vous appeliez les demandes POST " légèrement " plus sûr, car c’est à peu près ce qu’ils sont; il est trivial de simuler une demande POST d'un utilisateur vers une page. En faire une requête POST, cependant, empêche les accélérateurs ou les recharges Web de re-déclencher l'action par accident.

En tant qu'AJAX, il y a encore une autre considération à prendre en compte: si vous retournez JSON avec prise en charge des rappels, veillez à ne pas mettre de données sensibles que vous ne voulez pas que d'autres sites Web puissent y voir. Wikipedia avait une vulnérabilité dans ce sens où le jeton anti-CSRF de l'utilisateur a été révélé via son API JSON.

Autres conseils

Vous devez utiliser GET lorsque vous effectuez une demande sans effet secondaire, par exemple. juste chercher des informations. Cette demande peut:

  • Répétez sans problème - si le navigateur détecte une erreur, il peut réessayer en silence
  • Mise en cache de son résultat par le navigateur
  • Être mis en cache par un proxy

Ces choses sont toutes bonnes. Tout ce qui ne fait que récupérer des données (en particulier des données publiques) devrait vraiment être un GET. Le serveur doit envoyer des en-têtes sensibles Last-Modified: et Expires: afin de permettre la mise en cache, si nécessaire.

Cependant, en réponse à la question, les requêtes GET sont plus utiles dans certains scénarios que les requêtes POST:

  1. Ils peuvent être marqués d'un signet
  2. Ils peuvent être mis en cache
  3. ils sont plus rapides
  4. Ils ont des conséquences connues (en supposant qu'ils ne modifient pas les données), donc leur rendre visite plusieurs fois n'est pas un problème.

Par souci de postérité, mettez à jour ce commentaire avec les notes de blogues concernant le point 3, tout en revient à Omar AL Zabir (l'auteur du document référencé article de blog ):

  

"Atlas crée par défaut HTTP POST pour tous les appels AJAX. Http POST est   plus cher que Http GET. Il transmet plus d'octets sur le fil,   prenant ainsi un temps réseau précieux et qui fait également ASP.NET faire extra   traitement sur le serveur. Donc, vous devriez utiliser Http Get autant que   possible. Cependant, Http Get ne vous permet pas de transmettre des objets en tant que   paramètres. Vous pouvez passer des chiffres, des chaînes et des dates uniquement. Quand tu fais   un appel Http Get, Atlas construit une URL encodée et réussit   url. Donc, vous ne devez pas passer trop de contenu qui rend l'URL devenir   plus grand que 2048 caractères. Pour autant que je sache, c’est le maximum   longueur de toute URL.

     

Une autre chose perverse à propos de http post est qu’il s’agit en fait de 2 appels. Premier   Le navigateur envoie les en-têtes de publication http et les réponses du serveur avec “HTTP 100   Continuer". Lorsque le navigateur le reçoit, il envoie le corps actuel. "

Cela pourrait vous aider à décider où utiliser GET et où utiliser POST:

URI, adressabilité et utilisation de HTTP GET et POST .

Il y a une autre différence que personne n'a mentionnée.

Les requêtes GET sont transmises dans la chaîne d'URL et sont donc soumises à une limite de longueur, qui dépend généralement du navigateur.

Les demandes POST peuvent être beaucoup plus volumineuses - en réalité, elles ne sont pas limitées. Donc, si vous avez besoin de demander des données à un serveur Web et que vous transmettez beaucoup d’informations sur les paramètres, une requête POST peut être la seule option.

Ainsi, comme indiqué précédemment, une demande GET sert en réalité à demander des données (aucun effet secondaire), alors qu'une demande POST est généralement utilisée pour renvoyer des données au serveur (avec des effets secondaires). par exemple. Utilisez POST pour télécharger un fichier. OBTENIR pour récupérer un fichier.

Il fut un temps où IE, je crois, avait une très courte chaîne d'URL GET. Certaines applications telles que Lotus Notes utilisent un grand nombre de caractères aléatoires pour représenter les identifiants de document. J'avais le déplaisir d'utiliser un autre produit générant des chaînes aléatoires, de sorte que l'URL de la page était unique à chaque fois. La chaîne aléatoire était énorme ... et cela ne fonctionnait pas toujours avec IE6 en mémoire.

Les requêtes POST sont aussi peu sûres que les requêtes GET. La principale différence est que POST est utilisé pour modifier l’état de l’application serveur, tandis que GET ne lui demande que des données.

La différence est importante lorsque vous utilisez les expressions "propre", "reposant", Les URL, où l’URL elle-même spécifie la ressource et les différentes méthodes déclenchent différentes actions côté serveur.

Peut-être plus important encore, GET est lisible / visible dans l'historique des URL et peut être consulté avec Google.

Le POST est important lorsque vous ne voulez pas que l'événement devienne un signet ou puisse être saisi en tant qu'URL - sinon vous (ou Google explorant vos URL) risqueriez de finir par accidentellement supprimer des utilisateurs de votre système, par exemple.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top