Tout le monde Tous les développeurs Web connaissent les méthodes GET et POST qui peuvent être utilisées pour envoyer des données de formulaire.

Mais il existe d'autres méthodes dans le protocole HTTP, notamment PUT qui peut être utilisée pour créer des ressources et DELETE pour en supprimer. Ces méthodes sont doivent être utilisées par exemple dans un style d'architecture REST. M'intéressant à REST, j'ai voulu voir concrètement comment on pouvait utiliser ces méthodes.

Voici donc un petit résumé des tests que j'ai réalisés, sur base WAMP.

Déjà, côté navigateur, la seule façon d'après moi d'utiliser PUT ou DELETE, c'est avec XMLHttpRequest. J'ai essayé à tout hasard l'attribut method d'un formulaire, mais le navigateur envoie toujours un GET dans ces cas là (c'est conforme à la spec HTML 4 qui n'admet que 2 valeurs comme méthode de formulaire).

Côté serveur, ça se complique. J'ai trouvé deux possibilités.

  1. La 1ère, au niveau Apache. Apache a 2 modules (mod_dav et mo_dav_fs) qu'on peut activer. Il faut ensuite ajouté 2 lignes dans le httpd.conf (Voir la [documentation des modules Apache|http://httpd.apache.org/docs/2.2/mod/mod_dav.html|en] pour plus d'infos).

    DAV On
    ...
    DAVLockDB "E:/appft/poleweb2/tests/DAVLock"

    C'est très limité comme truc. Ça permet juste de créer ou de supprimer un fichier. Donc si on veut manipuler des données en base, ça ne va pas.

  2. La deuxième, en PHP (ou tout langage de script). Il faut quand même ajouter un petit truc dans la conf apache...

    < Directory "E:/www/" >
    ...
    Script PUT /tests/put.php
    </Directory >

    C'est juste un exemple, on peut le mettre ailleurs que dans un Directory (voir la documentation PHP sur PUT). En tout cas, ces lignes de configuration disent au serveur d'envoyer les requêtes PUT vers un certain script. A lui de faire le travail, en récupérant les données envoyées. Le lien précédent sur php.net fournit également un exemple. Idem pour DELETE.

Voilà où j'en suis arrivé. Je ne compte pas aller plus loin pour l'instant.

Vous trouverez plus de détails sur ces méthodes dans la RFC 2616 sur HTTP 1.1 (traduite en français).