HTML4 / XHTML1 n'autorise que GET et POST dans les formulaires, il semble maintenant que HTML5 fasse de même. Il y a une proposition pour ajouter ces deux mais cela ne semble pas gagner du terrain. Quelles étaient les raisons techniques ou politiques pour ne pas inclure PUT et DELETE dans le brouillon de la spécification HTML5?
265
<form>
méthodes GET et POST comme étant autorisées .Réponses:
C'est une question fascinante. Les autres réponses ici sont toutes spéculatives et, dans certains cas, totalement inexactes. Au lieu d'écrire mon opinion ici, j'ai en fait effectué des recherches et découvert des sources originales expliquant pourquoi supprimer et mettre ne font pas partie du format standard HTML5.
Il se trouve que ces méthodes ont été incluses dans plusieurs versions préliminaires de HTML5 (!), Mais ont ensuite été supprimées dans les versions suivantes . Mozilla l'avait également implémenté dans une version bêta de Firefox .
Pour quelle raison a-t-on retiré ces méthodes du projet? Le W3C a abordé ce sujet dans le rapport de bogue 10671 . Mike Amundsen a plaidé en faveur de ce soutien:
Cela vaut la peine de lire l'intégralité de son post.
Tom Wardrop fait également une remarque intéressante:
Le bogue a finalement été fermé par Ian Hickson, car il ne résout pas le problème , avec les raisons suivantes:
Cependant, ce n'est pas la fin de l'histoire! Le problème a été fermé dans le suivi des bogues du W3C et transmis au suivi des problèmes du groupe de travail HTML:
https://www.w3.org/html/wg/tracker/issues/195
À ce stade, il semble que la principale raison pour laquelle rien ne justifie ces méthodes est simplement que personne n’a pris le temps de rédiger une spécification complète à ce sujet.
la source
GET et POST ont une justification claire, indépendante du contenu. GET consiste à récupérer le contenu d'une URL de manière à pouvoir répéter et éventuellement mettre en cache. Le POST consiste à faire quelque chose d'une manière qu'il n'est pas sûr de répéter, d'exécuter de manière spéculative ou de mettre en cache.
Il n'y avait aucune raison similaire pour PUT ou DELETE. Ils sont tous deux complètement couverts par POST. La création ou la destruction d'une ressource sont des opérations qui ne peuvent être répétées, exécutées de manière spéculative et ne devraient pas être mises en cache. Aucune sémantique spéciale supplémentaire n'est nécessaire pour eux.
Donc, fondamentalement, il n'y a aucun avantage.
la source
POST
n’est pas idempotent, c’est pourquoi, lorsque vous cliquez sur "retour" dans votre navigateur, une page laide qui indique que le formulaire doit être renvoyé s’affiche. Cependant , si cela avait été le casPUT
, il pourrait renvoyer en toute sécurité laPUT
demande d'afficher la page que vous devriez obtenir. À condition bien sûr, on ne gâche pas l'API en créant une sorte deDELETE /resource/latest
.Ce problème a été soulevé en 2010 lorsque le bogue 10671 envisageait d'ajouter le support des méthodes PUT et DELETE .
Il y avait une quantité modérée de refoulement pour cette "fonctionnalité" et une certaine lourdeur, mais finalement cela a dégénéré en deux problèmes sur le suivi des bogues du groupe de travail:
Le problème ISSUE-196 a abouti à une décision consensuelle de ne pas modifier la spécification, car la spécification HTML ne restreint pas actuellement la manière dont les réponses aux demandes POST sont traitées. Je pense que cette question particulière a été soulevée lors de la tentative de réconciliation des modèles de redirection POST couramment utilisés et de la façon dont les serveurs ReSTful fournissent souvent des réponses 2xx avec des messages courts plutôt que quelque chose d'utile à restituer dans un navigateur.
Le numéro ISSUE-195 a été présenté aux présidents. Cameron Jones s'est porté volontaire pour rédiger une proposition de modification le 18 janvier 2012 qu'il a soumise pour devenir le premier projet de travail le 29 mai 2014. Le projet suivra le processus de recommandations du W3C .
Avec un peu de chance, cette recommandation deviendra bientôt une recommandation du W3C et sera mise en œuvre par les éditeurs de navigateurs. Elle constituerait un grand pas en avant dans la suppression des bloqueurs afin de produire des services ReSTful unifiés, sémantiques et conviviaux pour les navigateurs. J'imagine que cela déclenchera une évolution intéressante des modèles de service. Il y a une bonne conversation de Jon Moore - Les API Hypermedia valent la peine d'être surveillées, cela a suscité mon intérêt mais est tombé au premier obstacle (celui-ci).
la source
Je crois comprendre que les navigateurs ne savent pas quoi faire une fois qu’ils envoient un PUT ou un DELETE. Un POST redirige généralement vers une page appropriée, contrairement à PUT et DELETE. Cela les rend appropriés pour appeler via ajax ou un programme natif, mais pas à partir d'un formulaire de navigateur Web.
Je ne peux pas le cacher pour l'instant, mais je me souviens d'avoir lu l'une des listes de diffusion html5 alors qu'ils en discutaient.
la source
Histoire
Je pense qu'il convient de mentionner la première apparition de formulaires HTML dans le RFC1866 (section 8.1) . Ici, l'attribut de méthode est défini comme suit:
Des explications supplémentaires se trouvent dans les sections 8.2.2 - GET et 8.2.3 - POST.
N'oubliez pas que HTML 2.0 (nov. 1995) a été spécifié avant HTTP 1.0 (mai 1996). Donc tout le monde utilisait HTTP uniquement avec GET (à partir de HTTP 0.9) ou avec l'extension POST. Mais seuls quelques serveurs Web ont pris en charge PUT et DELETE (comme indiqué dans l’ annexe HTTP 1.0 ).
Pensées
Si vous réfléchissez à la manière dont le développement du Web sémantique de Berners-Lee aurait pu évoluer, il semble évident qu'il est passé des problèmes réels à un concept général. Il voulait d'abord partager des documents. Par conséquent, il avait besoin de balisage. Ensuite, il a voulu interroger les bases de données sur le contenu, il avait donc besoin de formulaires. Ensuite, il a voulu mettre de nouvelles données dans la base de données. Il a donc utilisé des formulaires avec GET et POST. Après cela, il s'est peut-être rendu compte que toutes les opérations CRUD pouvaient être effectuées sur des données distantes. HTTP a donc été étendu mais jamais HTML car il était trop tard (seuls quelques serveurs supportaient les nouvelles opérations CRUD).
la source
Jeter juste une hypothèse improbable, mais probablement parce que HTTP n'est pas vraiment efficace avec le contrôle d'accès, et que la dernière chose dont tout le monde a besoin est encore plus de moyens pour les URL malveillantes de compromettre un site Web et / ou une application mal sécurisé (e).
HTTP n'est pas vraiment un bon protocole pour les transferts de fichiers, à part le téléchargement depuis le serveur vers le client. Utilisez FTP - ou mieux encore, SFTP.
la source
curl --request PUT http://A.B.c/index
La question est de savoir pourquoi pouvez-vous accéder à ces commandes via HTML.Get et post are sont des formats de transmission des données de la requête.
Je suppose que vous demandez de faire de la soumission de formulaire un service RESTFUL. Mais cela n’a aucun sens de changer le standard de requête http pour faire des suppositions l’objet de la requête http. Les informations relatives à la fonction remplie par la demande sont mieux traitées dans les champs de saisie.
Avoir une adresse et obtenir et poster permet au serveur d'interpréter correctement la requête et ses valeurs d'entrée. À partir de là, les valeurs d'entrée vous permettent de faire des demandes ouvertes au serveur et de faire ce que vous voulez. Par exemple, vous pouvez avoir un champ dont les valeurs sont "put" et "delete"
la source