Quelle est la différence entre les méthodes HTTP GET, POST, PUT et DELETE?

je développe le service REST WCF et comme théoriquement je sais quand choisir pour quel but.

  • GET pour accéder à la ressource
  • PUT mettre à jour
  • POST à insérer
  • DELETE supprimer

mais quel est l'inconvénient si nous ne suivons pas cette règle ci-dessus, supposons d'insérer un enregistrement que j'ai utilisé GET méthode?

44
demandé sur Fooker 2013-08-23 09:39:02

3 réponses

parce que la méthode HTTP GET est spécifiée comme idempotent, une requête GET, par spécification, peut être soumise de nouveau avec l'hypothèse qu'elle ne changera rien sur le serveur. Ce n'est pas le cas D'un HTTP POST qui, par spécification, peut changer l'état de l'application tournant sur le serveur.

ainsi, par spécification, on peut effectuer un HTTP GET contre une page N plusieurs fois sans se soucier de changer son statut.

ne respectant pas les la spécification peut avoir différents résultats indésirables. Par exemple, les moteurs de recherche Web suivent la requête GET pour indexer un site, mais pas le POST. Si vous avez autorisé une requête HTTP GET à apporter des modifications à la base de données, vous pouvez facilement comprendre l'implication indésirable qu'elle peut avoir.

respecter une spécification, c'est comme respecter un accord entre votre service ou votre site web et un ensemble de consommateurs différents qui peuvent être des navigateurs d'utilisateurs normaux, mais aussi d'autres services comme les moteurs de recherche web.

vous pourriez construire un site qui utilise un GET pour insérer un enregistrement, mais vous devriez également vous attendre à ce que tout ce qui est construit autour pour consommer votre site fonctionne avec l'hypothèse que vous respectez l'accord.

comme dernier exemple, les navigateurs web avertissent les Utilisateurs quand ils essaient de rafraîchir une page qui a été atteinte par une requête HTTP POST avertissant que certaines données pourraient être soumises de nouveau. Vous n'obtenez pas cette couche de protection des navigateurs intégrés si la page est atteinte par un HTTP Requête GET.

Vous pouvez en lire plus ici: http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html

46
répondu Giuseppe Romagnuolo 2016-04-08 17:04:32

mais quel est l'inconvénient si nous ne suivons pas cette règle ci-dessus, supposons pour insérer un enregistrement que j'ai utilisé la méthode GET.

Les moteurs de recherche accèdent à vos pages en utilisant les requêtes GET, donc si vous faites cela, le moteur de recherche de google pourrait insérer des enregistrements que vous ne vouliez pas.

souvent, les gens utiliseront POST pour n'importe quel type de requête ajax, avec l'action réelle dans le corps de la requête. Il n'y a rien de très mal à cela, mais la fonctionnalité est là pour vous d'utiliser, donc vous peut aussi bien l'utiliser.

9
répondu Dan 2013-08-23 05:49:45

j'ai fait face à une situation que je devrais avoir utilisé le METTRE à la place de l'OBTENIR. J'ai eu un appel d'insertion de permission à destination d'un tiers( c'était google). Je lance un appel Ajax obtenir demande de permission de mise à jour à mon Servlet et de leur l'appel est allé au service externe. Le service externe a mis beaucoup de temps à répondre à la demande. Pendant ce temps, je voyais une duplication du même appel de permission dans les journaux de mon serveur. C'est le navigateur qui continue à appeler le serveur en disant: êtes-vous fait? comme C'est un GET et que le navigateur peut appeler le serveur autant de fois que possible. Navigateur suivi la norme et mon code n'a pas. J'ai eu le problème pour ne pas suivre la norme.

3
répondu pushya 2014-10-17 15:14:10