Mélanger GET avec POST-est-ce une mauvaise pratique?

est-ce une mauvaise pratique de mélanger GET et POST? (notez que C'est en PHP)

e.g.

<form action="delete.php?l=en&r=homepage" method="post">
 <!-- post fields here -->
</form>
27
demandé sur mauris 2009-10-20 08:21:25

3 réponses

en fait, cela va envoyer une requête de requête POST au serveur, donc techniquement vous ne mélangez pas les deux ensemble : vous utilisez POST avec des paramètres d'url. Il n'y a rien de fondamentalement mauvais avec cela, tant que vous n'utilisez pas votre URL pour les paramètres qui devraient être dans la forme comme champ caché.

il y a des règles simples : vous utilisez GET (éventuellement avec des paramètres D'URL) pour les choses constantes qui ne changent pas le serveur, et POST pour les choses qui modifient le serveur. Si votre url les paramètres contenaient L'ID de quelque chose que vous vouliez supprimer, alors ce serait une mauvaise pratique.

EDIT, des années plus tard

on m'a demandé la source, alors voici la partie pertinente du spectre même de HTTP

http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html

la convention a été établie que le GET et les méthodes de tête ne devraient pas avoir la signification de prendre une action autre que récupération. Ces méthodes doivent être considérées comme "sûres". Cela permet aux agents utilisateurs de représenter d'autres méthodes, comme POST, PUT et DELETE, d'une manière spéciale, de sorte que l'utilisateur est conscient du fait qu'un, voire dangereux d'action est demandée.

voilà, GET ne doit rien changer, POST est pour les choses qui changent le serveur (opération dangereuse). Je devrais être capable d'appel d'OBTENIR un certain nombre de fois. Il est plus que idempotent : il devrait être (autant que possible) sans effets secondaires! Avec la demande peut même ne pas atteindre le serveur si la mise en cache est impliquée.

alors oui: vous avez un formulaire, vous voulez savoir si vous utilisez GET ou POST? Puis changez server = > POST, ne changez pas server = > GET. et comme une URL peut être consultée avec n'importe quel verbe (get ou post), ne mettez pas les données qui changent le serveur dans L'URL, parce que quelqu'un peut copier cette URL, faire une GET et changer votre serveur sans vous connaître. imaginez ce qui se passerait si quelqu'un copiait cette URL sur facebook et que 10 000 personnes commençaient à supprimer des choses aléatoires? Pas bonne. Cadre récent (node, ruby) sont mieux isolés contre cela, mais pas PHP de base, donc c'est une bonne règle empirique pour cette langue.

45
répondu Laurent Bourgault-Roy 2014-02-25 19:24:19

C'est encore un POST, vous êtes juste, y compris une chaîne de requête dans l'URL. Je ne vois pas de problème avec cela. Cela est probablement plus propre que d'inclure ces variables dans les données post en utilisant des champs d'entrée cachés. De Plus, sur le serveur, vous ne voulez probablement pas la valeur de l (langue? avec votre post. Si elle est toujours dans la chaîne de requête, vous pouvez le même code que vous ailleurs pour déterminer la langue, plutôt que d'avoir un cas spécial pour les requêtes POST.

5
répondu Joel 2009-10-20 04:31:03

Non, c'est bon. Je fais exactement cela sur le site web de mon entreprise, par exemple sur la page de l'administrateur utilisateur. L'URL normale est:

/admin/user?name=jkugelman

puis supprimer un utilisateur que je poste sur cette même page, sauf que je poste une variable au lieu de faire un GET, puisque supprimer est une action stateful et devrait être fait avec un POST. Il ressemble à quelque chose comme ceci:

<!-- Post back to self -->
<form action="/admin/user?name=jkugelman">
    <input type="submit" name="delete" value="Delete"
           onchange="return confirm('Are you sure?')" />
</form>
5
répondu John Kugelman 2014-01-24 15:15:21