web-dev-qa-db-fra.com

Quelle est la différence entre POST et GET?

Ce n'est que récemment que je me suis impliqué dans PHP/AJAX/jQuery et il me semble qu'une partie importante de ces technologies est celle de POST et GET.

Premièrement, quelle est la différence entre POST et GET? En expérimentant, je sais que GET ajoute les variables de retour et leurs valeurs à la chaîne d'URL

website.com/directory/index.php?name=YourName&bday=YourBday

mais POST ne le fait pas.

Alors, est-ce la seule différence ou existe-t-il des règles ou conventions spécifiques pour utiliser l’un ou l’autre?

Deuxièmement, j'ai aussi vu POST et GET en dehors de PHP: également dans AJAX et jQuery. Comment POST et GET diffèrent-ils entre ces 3? S'agit-il de la même idée, des mêmes fonctionnalités, simplement utilisées différemment?

362
Hristo

Une POST, contrairement à GET, a généralement des informations pertinentes dans le corps de la demande. (Une GET ne devrait pas avoir de corps. Ainsi, mis à part les cookies, le seul endroit pour transmettre des informations est l'URL.) Outre le fait de garder l'URL relativement propre, POST vous permet également d'envoyer beaucoup plus d'informations ( car les URL ont une longueur limitée, à toutes fins pratiques), et vous permettent d'envoyer à peu près n'importe quel type de données (les formulaires de téléchargement de fichiers, par exemple, ne peuvent pas utiliser GET - ils doivent utiliser POST plus un type de contenu/encodage spécial).

En plus de cela, un POST indique que la requête va changer quelque chose et ne doit pas être refaite de gré. C'est pourquoi votre navigateur vous demande parfois si vous souhaitez soumettre à nouveau les données de formulaire lorsque vous cliquez sur le bouton "Précédent".

GET, d'autre part, devrait être idempotent - ce qui signifie que vous pouvez le faire un million de fois et le serveur fera la même chose (et affichera le même résultat) chaque fois. temps.

89
cHao

Bien qu'il ne s'agisse pas d'une description des différences, voici quelques points à prendre en compte lors du choix de la méthode correcte.

  • Les requêtes GET peuvent être mises en cache par le navigateur, ce qui peut être un problème (ou un avantage) lors de l'utilisation de ajax.
  • Les requêtes GET exposent les paramètres aux utilisateurs (le POST le fait aussi mais ils sont moins visibles).
  • Le POST peut transmettre beaucoup plus d'informations au serveur et peut être de n'importe quelle longueur.
29
Alex

POST et GET sont deux méthodes de requête HTTP . GET est généralement destiné à extraire certaines données. On s'attend à ce qu'il soit idempotent (la répétition de la requête n'a aucun effet secondaire) et ne peut envoyer que des quantités limitées de données de paramètres au serveur. Les requêtes GET sont souvent mises en cache par défaut par certains navigateurs si vous ne faites pas attention.

Le POST est destiné à changer l’état du serveur. Il transporte plus de données et la répétition de la requête est autorisée (et souvent attendue) à avoir des effets secondaires tels que la création de deux messages au lieu d'un.

17
Victor Nicollet

Si vous travaillez RESTfully , GET doit être utilisé pour les demandes pour lesquelles vous ne récupérez que des données, et POST doit être utilisé pour les demandes pour lesquelles vous souhaitez faire quelque chose.

Quelques exemples:

  • OBTENIR la page affichant une SO question particulière

  • Poste un commentaire

  • Envoyez une demande POST en cliquant sur le bouton "Ajouter au panier".

14
Skilldrick

Avec POST, vous pouvez également coder mime en plusieurs parties, ce qui signifie que vous pouvez également joindre des fichiers. De même, si vous utilisez des variables de publication dans la navigation des pages, l'utilisateur recevra un avertissement lui demandant s'il souhaite soumettre à nouveau le paramètre de publication. Ils ont généralement le même aspect dans une requête HTTP, mais vous devez vous en tenir à POST si vous devez "envoyer" quelque chose à un serveur et à "obtenir" si vous devez obtenir quelque chose d'un serveur car c'est la comme ils étaient destinés.

6
Matt Williamson

La seule "grande" différence entre POST & GET (lorsque vous les utilisez avec AJAX) est que puisque GET est une URL fournie, leur longueur est limitée (puisque les URL ne sont pas infinies).

1
Activist