2009-12-09 5 views
21

Pourquoi existe-t-il des requêtes GET et POST dans AJAX car elles n'affectent pas l'URL de la page? Quelle différence cela fait-il en passant des données sensibles sur GET dans AJAX car les données ne sont pas reflétées dans l'URL de la page?GET vs POST dans AJAX?

+2

Les données sont reflétées dans l'URL de la page à l'aide de GET. Jetez un oeil à ce qui se passe avec un moniteur TCP/IP ou même simplement le module complémentaire Header Monitor pour Firefox. –

+0

Copie possible: http://stackoverflow.com/questions/715335/get-vs-post-in-ajax/ – trante

Répondre

41

Vous devez utiliser le verbe HTTP correspondant à ce dont vous avez besoin de votre service Web.


Lorsque vous traitez avec un URI Collection comme: http://example.com/resources/

GET: Liste des membres de la collection, et également leur URIs membres pour une navigation. Par exemple, listez toutes les voitures à vendre.

PUT: la signification définie comme "remplacer toute la collection avec une autre collection".

POST: Créez une nouvelle entrée dans la collection dans laquelle l'ID est attribué automatiquement par la collection. L'ID créé est généralement inclus dans les données renvoyées par cette opération.

DELETE: Signification définie comme "supprimer la totalité de la collection".


Lorsque vous traitez avec un URI membre comme: http://example.com/resources/7HOU57Y

GET: Récupérer une représentation de l'organe adressé de la collection exprimée dans un type MIME approprié.

PUT: Mettez à jour le membre adressé de la collection ou créez-le avec l'ID spécifié.

POST: traite le membre adressé comme une collection à part entière et en crée un nouveau subordonné.

DELETE: Supprimer le membre adressé de la collection.


Source: Wikipedia

+1

Est-ce que quelqu'un dérange réellement avec PUT et DELETE? – carl

+10

"Est-ce que quelqu'un se soucie réellement de PUT et DELETE?" - avez-vous déjà entendu parler d'Amazon S3? –

+3

Oui, lorsque vous définissez les services Web RESTful, vous le faites absolument. – Red3

18

Eh bien, comme pour GET, vous avez toujours la limitation de la longueur de l'URL. Autre que cela, il est tout à fait concevable que le serveur traite différemment les requêtes POST et GET; donc le besoin d'être en mesure de spécifier quelle demande vous faites.

+0

En outre, vous pouvez utiliser les deux types de demande lors du développement d'une application. Pour la plupart d'entre eux, le drapeau 'is_ajax' suffit. Mieux vaut avoir un tel choix que de ne pas l'avoir. –

+1

J'accepte la réponse de dnl.vssll parce que la restriction de longueur d'URL de GET n'est pas imposée par HTTP ou AJAX, vous pouvez vérifier cette réponse pour cela http://stackoverflow.com/questions/812925/what-is-the-maximum-possible- length-of-a-query-string. Son limité par navigateur/serveur et pourquoi sa limite est vraiment un point de discussion ..comme HTTP est basé sur le texte, le navigateur envoie la requête HTTP dans son ensemble. Il inclut la chaîne de requête, donc s'il n'y a pas de limite de longueur de requête (En supposant un cas idéal) – Xinus

+5

Je ne plaidais pas pour défendre la limite de longueur, je disais juste que c'était là, et que vous devrez le considérer, parce que quand vous faites du développement web, vous ne pouvez vraiment pas vous permettre de ne pas tenir compte des navigateurs * *. mais bon, vous n'avez pas besoin de motiver vos acceptations; La réponse de dnl était bonne aussi =) –

6

Deux principales raisons pour les avoir:

  1. GET demandes ont des limites très restrictives sur la taille; POST sont généralement capables de contenir beaucoup plus d'informations. Le backend peut s'attendre à GET ou POST, selon la façon dont il a été conçu. Nous avons besoin de la flexibilité de faire un GET si le backend en attend un, ou un POST si c'est ce qu'il attend.

4

Vous envoyez normalement les paramètres au script AJAX, il renvoie les données en fonction de ces paramètres. Cela fonctionne exactement comme une forme avec method = "get" ou method = "post". Lors de l'utilisation de la méthode GET, les paramètres sont transmis dans la chaîne de requête. Lors de l'utilisation de la méthode POST, les paramètres sont envoyés dans le corps du message.

Généralement, si vos paramètres ont très peu de caractères et ne contiennent pas d'informations sensibles, vous les envoyez via la méthode GET. Les données sensibles (par exemple, un mot de passe) ou un texte long (par exemple une biographie longue de 8000 caractères d'une personne) sont mieux envoyés via la méthode POST.

+0

AFAIK Les méthodes GET et POST ne diffèrent que par leur format de requête, donc je ne pense pas que le POST soit plus sécurisé que GET. GET est considéré comme non sécurisé car les paramètres sont reflétés dans l'URL, mais AJAX surmonte ce problème. Aussi tous les navigateurs modernes ne limitent pas la quantité de données que nous pouvons envoyer via la requête GET .. Seule explication possible que j'ai pu voir des réponses est AJAX est conçu pour exister avec le protocole HTTP bien établi .. ce qui est logique. – Xinus

+0

@Xinus: Dernièrement, les navigateurs * et * ont toujours imposé des limites de longueur d'URL significatives (par exemple, GET), tout comme la spécification HTTP IIRC. Pouvez-vous poster une référence pour votre déclaration qu'ils ne le font pas? –

+1

Vous avez raison. Mais la raison pour laquelle certaines personnes considèrent que le POST est * légèrement * plus sécurisé que GET est que les paramètres GET peuvent être stockés dans divers emplacements, y compris les journaux de serveur et l'historique du navigateur sous la forme d'URL. POST n'a pas ce problème. –

0

D'autres ont couvert les principaux points (contexte/idempotence, et taille), mais j'en ajouterai un autre: le chiffrement. Si vous utilisez SSL et souhaitez crypter vos arguments d'entrée, vous devez utiliser POST.

+1

Ceci est incorrect. Toutes les données transférées via SSL sont cryptées. GET vs POST ne fait aucune différence. –

+1

Je suis d'accord avec Joel L. Toute la communication est cryptée alors où est une question de quelle méthode utilisée? – Xinus

9

Une autre différence entre GET et POST est la manière dont la mise en cache est gérée dans les navigateurs. POST La réponse n'est jamais mise en cache. GET peut ou non être mis en cache en fonction des règles de mise en cache spécifiées dans vos en-têtes de réponse.

0

Lorsque nous utilisons la méthode GET dans Ajax, seul le contenu de la valeur du champ est envoyé, pas le format dans lequel le contenu est. Par exemple, le contenu de la zone de texte est simplement ajouté dans l'URL dans le cas de la méthode GET (sans un nouveau caractère de ligne). Ce n'est pas le cas dans la méthode POST.

1

Merci .. J'utilise principalement la méthode GET avec l'Ajax et je ne l'ai pas eu de problème jusqu'à présent, sauf les éléments suivants: cache

Internet Explorer (contrairement à Firefox et Google Chrome) Inscrivez-vous appeler si vous utilisez la même GET valeurs. Ainsi, en utilisant un intervalle avec Ajax GET, vous pouvez afficher les mêmes résultats, sauf si vous modifiez l'URL avec une utilisation aléatoire non pertinente pour chaque Ajax GET.

6

Il s'agit simplement de respecter les règles du protocole http.

Obtenez - les appels doivent être idempotents. Cela signifie que si vous l'appelez plusieurs fois, vous obtiendrez le même résultat. Il n'est pas prévu de changer les données sous-jacentes. Vous pouvez l'utiliser pour un champ de recherche, etc.

Message - les appels ne sont PAS idempotents. Il est permis d'apporter une modification aux données sous-jacentes, donc pourrait être utilisé dans une méthode create. Si vous l'appelez plusieurs fois, vous créerez plusieurs entrées.