2010-07-31 5 views
26

J'essaie de comprendre pourquoi les méthodes put/delete, dans un site compatible HTML5, ne fonctionnent pas avec Chrome. D'après ce que j'ai cherché, il semble que cela fonctionne depuis un certain temps avec Chrome, donc cela dit je cherche juste quelques conseils pour affiner mon problème. Peut-être que j'applique mal la forme, peut-être mon doctype est faux, qui sait. Toute aide est appréciée :)Les méthodes HTML5 PUT/DELETE ne fonctionnent pas dans Chrome?

Ainsi, le code ressemble à ceci:

<!DOCTYPE html> 
<html> 

<head> 
     <title> 
      some_resource 
     </title> 
    </head> 
    <body> 
    <div class="content"> 
    <form method="put" action="/some_resource"> 
    <div> 
    <input id="title" name="title" placeholder="The Resource Title" type="text" value="" autofocus /> 
    </div> 
    <div> 
    <textarea id="body" name="body" placeholder="The Resource Body" required></textarea> 
    </div> 
    <div> 
    <input id="submit" name="submit" type="submit" value="Submit" /> 
    </div> 
    <!-- Resource Settings --> 
    <ul> 
    <li> 
    <input id="listed" name="listed" type="checkbox" value="y" /> 
    </li> 
    <li> 
    <input id="template" name="template" type="text" value="resource.html" /> 
    </li> 
    </ul> 
    </form> 
    </div> 
    </body> 
</html> 

Juste un test de base pour une forme. Maintenant, je l'ai essayé sur le dernier Firefox Ubuntu (3.6.7), Opera (10.60 interne), et la dernière version bêta de Google Chrome de Google (5.0.375.99 bêta). Aucun d'entre eux ne semble envoyer la méthode put appropriée au serveur, quand je soumets le formulaire. Maintenant, je crois (pas de recherche spécifique) que Firefox doit encore supporter cela, et que comme beaucoup de HTML5, il est prévu pour la prochaine version de FF. Opera je ne sais pas, mais j'entends souvent à ce sujet au rythme de Chrome. Donc .. oui, je suis un peu confus.

Lors de la soumission du formulaire, ils vont à l'adresse URL: http://localhost:8080/some_resource?title=t&body=b&submit=Submit&template=resource.html. Notez que, comme prévu, POST fonctionne très bien.

Maintenant, est-ce que quelqu'un a des pointeurs pour faire fonctionner la méthode put? Il est possible que la version bêta de Linux n'ait pas été mise à jour pour celle de Windows (quelque chose que je suppose, est ce que les gens parlaient quand j'ai vu PUT travailler pour Chrome), mais je l'espère vraiment est un problème avec ma mise en œuvre.

Les serveurs doivent-ils prendre en charge PUT/DELETE? (J'utilise AppEngine Dev Server actuellement). Je ne sais pas .. espérons que quelqu'un a des idées :)

Grâce à des réponses, Lee

Note: Autres fonctionnalités HTML5 j'ai testé à ce jour fonctionnent. Par exemple, sous cette forme, vous pouvez voir l'autofocus et les attributs requis. Ceux-ci fonctionnent comme prévu dans Chrome.

Edit1: Juste pour clarifier, je comprends le soutien pour ceux-ci est sommaire. Comme j'ai répondu à une réponse plus tôt, je ne me soucie pas du support actuel dans d'autres navigateurs. Actuellement Chrome est ce que je veux travailler, et je m'attends à ce que Firefox fonctionne dans la prochaine version (je ne sais pas, je les entends beaucoup pousser HTML5), et je n'ai aucune idée d'Opera. Tout cela est simplement pour tester et apprendre le nouveau monde merveilleux de HTML5 (Web Workers, localStorage, etc) et CSS3. Je me soucie seulement des navigateurs à la pointe de la technologie, qui correspondent à la technologie de pointe.

+4

'PUT' et' DELETE' n'a rien à voir avec HTML5; ils sont définis dans la spécification HTTP/1.1. Le support doit être présent à la fois côté client (à envoyer) et serveur (à gérer). – You

+0

Oui, et l'utilisation, comme autorisé être HTML5, est quelque chose que je suis très excité. La question est .. pourquoi ne fonctionne-t-elle pas: /. Bon sang, certaines personnes disent qu'une tonne d'attributs est actuellement supportée, mais je n'arrive même pas à faire fonctionner PUT/DELETE. Argh –

+0

Il y a un brouillon pour obtenir ces verbes supportés officiellement. Je n'ai aucune idée de pourquoi cela a pris si longtemps, comme PUT/DELETE ont fait partie de HTTP depuis des lustres. Voir http://amundsen.com/examples/put-delete-forms/ pour plus d'informations. Jusqu'à ce que ce projet soit accepté, les navigateurs n'enverront tout simplement pas autre chose que GET et POST. –

Répondre

23

PUT et DELETE sont des méthodes plus prises en charge pour le <form> marque. Voir HTML5 differences from HTML4 (19 Oct 2010)

+4

Merci pour les heads up .. Une idée de comment REST est censé être mis en œuvre alors? –

+8

La prise en charge PUT et DELETE a été supprimée de la spécification HTML5 en termes de leur ajout en tant que valeur à un attribut "méthode" de

, par exemple. . Mais PUT et DELETE sont très bien vivants dans le cadre du HTTP 1.1 spec, ce qui signifie qu'un serveur peut encore les écouter (pour les appels REST), et je crois qu'il est toujours possible d'obtenir un navigateur pour envoyer PUT et DELETE via Ajax (voir http://stackoverflow.com/questions/165779/ sont-le-put-delete-head-etc-méthodes-disponibles-dans-la plupart des navigateurs web) –

3

Il n'y a pas de «HTML5», en tant que norme monolithique.

Une partie est identique à HTML4. Certaines d'entre elles ratifient des fonctionnalités techniquement non standard que tous les navigateurs implémentent et que tout le monde utilise depuis des années. Certaines de ces nouvelles extensions sont généralement acceptées par les fournisseurs de navigateurs et se trouvent à différents stades d'implémentation. Comme, par exemple, autofocus. Mais il y en a aussi qui sont susceptibles d'être modifiés avant d'être standardisés, et certains de ces bonus aléatoires que certains membres de WHATWG pensaient être sympas, mais qui ne montrent aucun signe de soutien de la part de les auteurs du navigateur.

Il y a moins de cette dernière catégorie qu'autrefois (les premières versions de WHATWG étaient presque aussi complètes que XHTML 2.0), mais il y en a encore, et actuellement, les types de soumission de formulaires étendus (PUT/Les méthodes DELETE et certaines des actions non-HTTP) sont dans cette catégorie. Chaque navigateur ignore actuellement method="put", retombant à la valeur attr par défaut get à la place. Peut-être qu'un jour les navigateurs implémenteront ceci. Ou peut-être que ça va être excisé de la spécification. HTML5 est encore loin d'être terminé. Pour l'instant, il suffit d'utiliser POST comme tout le monde. Ce n'est pas tout à fait RESTfulness pur, mais alors cela ne vous donne vraiment rien de spécial.

<input ... autofocus /> 

Utilisez des syntaxes HTML ou XHTML, mais ne les mélangez pas. autofocus="autofocus" pour XHTML5 ou pour HTML5 perdent la fermeture automatique /.

<input id="submit" name="submit" type="submit" value="Submit" /> 

Meilleur éviter de nommer un bouton qui, pour éviter des affrontements avec la méthode form.submit(). Vous n'avez pas besoin de name sur un bouton d'envoi sauf si vous devez vérifier un clic sur un bouton particulier, de toute façon. (Et vous n'avez pas besoin d'ajouter id s à tous vos champs soit. Sauf si vous avez besoin d'un id pour <label for ou ciblage de script, vous pouvez les laisser.)

+0

Alors, de quoi parlons-nous exactement à propos de Chrome qui supporte PUT/DELETE? Pour le dire franchement, je les utilise sur des projets personnels et pour apprendre les nouvelles fonctionnalités HTML5 (travailleurs sur le Web, etc), donc je me fous si je laisse les autres navigateurs dans la poussière. Je m'attendais à ce que Chrome fonctionne, Firefox ne fonctionne pas du tout (jusqu'à ce qu'il se mette à jour, ce qui apporte plus de support HTML5), et .. qui connaît Opera. IE ofcourse, nécessiterait Chrome Frame. Je veux simplement que les méthodes fonctionnent comme prévu .. pourquoi parler de Chrome supportant PUT/DELETE? Est-ce que je les ai mal compris? –

+0

En ce qui concerne la fermeture (/>) et le nommage (submit), c'est à partir d'une bibliothèque de générateur de formulaires (WTForms de Python) et je n'ai pas encore vu comment changer les balises fermantes. En ce qui concerne le nom du bouton de soumission, c'est facilement modifiable. Encore une fois, c'est juste un test pour que PUT fonctionne. Tout le reste n'a pas d'importance :) –

+0

Je n'ai pas entendu parler de ça moi-même, mais je suppose que, comme vous le mentionnez, cela peut être lié à 'XMLHttpRequest', qui permet l'envoi de ces méthodes sauf sur certains navigateurs plus anciens. – bobince

Questions connexes