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?
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.
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.
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.
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".
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.
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).