155 votes

Méthodes de l'API RESTful ; HEAD & OPTIONS

Je suis en train d'écrire un module d'API RESTful pour une application en PHP, et je suis un peu mitigé sur les verbes HEAD y OPTIONS .

  • OPTIONS  Utilisé pour récupérer les verbes HTTP disponibles pour une ressource donnée ?
  • HEAD Utilisé pour déterminer si une ressource donnée est disponible ?

Si quelqu'un pouvait clarifier* ces verbes, ce serait très apprécié.

* La clarification concernait les architectures d'API RESTful qui réutilisent les verbes HTTP. Je me suis depuis rendu compte que les deux types de verbes de l <code>HEAD</code> y <code>OPTIONS</code> devrait <em>no </em>et se comporter de manière prévisible comme n'importe quelle application HTTP. Oh, comme nous avons grandi en deux ans.

211voto

Yuriy Kvartsyanyy Points 1718

OPTIONS renvoie des informations sur la méthode API (méthodes/type de contenu)

HEAD renvoie des informations sur la méthode ressource (version/longueur/type)

Réponse du serveur

OPTIONS

HTTP/1.1 200 OK
Allow: GET,HEAD,POST,OPTIONS,TRACE
Content-Type: text/html; charset=UTF-8
Date: Wed, 08 May 2013 10:24:43 GMT
Content-Length: 0

TÊTE

HTTP/1.1 200 OK
Accept-Ranges: bytes
Content-Type: text/html; charset=UTF-8
Date: Wed, 08 May 2013 10:12:29 GMT
ETag: "780602-4f6-4db31b2978ec0"
Last-Modified: Thu, 25 Apr 2013 16:13:23 GMT
Content-Length: 1270
  • OPTIONS Identifier les méthodes HTTP prises en charge par une ressource, par exemple, pouvons-nous la SUPPRIMER ou la mettre à jour par le biais d'un PUT ?
  • HEAD Vérifier si une ressource a été modifiée. Cette fonction est utile pour maintenir une version en cache d'une ressource.
  • HEAD Récupérer des métadonnées sur la ressource, par exemple son type de média ou sa taille, avant d'effectuer une recherche éventuellement coûteuse.
  • HEAD, OPTIONS Tester si une ressource existe et est accessible. Par exemple, valider les liens soumis par les utilisateurs dans une application.

Ici est un article agréable et concis sur la façon dont HEAD et OPTIONS s'intègrent dans l'architecture RESTful.

86voto

sdolgy Points 4033

Comme prévu : http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html

9.2 OPTIONS

La méthode OPTIONS représente une demande d'informations sur les options de communication disponibles sur la chaîne demande/réponse identifiée par l'URL de la demande. Cette méthode permet au client de déterminer les options et/ou les exigences associées à une ressource, ou les capacités d'un serveur, sans impliquer une action sur la ressource ou initier une recherche de ressource.

Les réponses à cette méthode ne peuvent pas être mises en cache.

Si la requête OPTIONS comprend un corps d'entité (comme indiqué par la présence de Content-Length ou Transfer-Encoding), le type de média DOIT être indiqué par un champ Content-Type. Bien que la présente spécification ne définisse pas l'utilisation d'un tel corps, les futures extensions du protocole HTTP pourraient utiliser le corps OPTIONS pour effectuer des requêtes plus détaillées sur le serveur. Un serveur qui ne prend pas en charge une telle extension PEUT rejeter le corps de la requête.

Si l'URL de la requête est un astérisque ("*"), la requête OPTIONS est destinée à s'appliquer au serveur en général plutôt qu'à une ressource spécifique. Étant donné que les options de communication d'un serveur dépendent généralement de la ressource, la requête "*" n'est utile que comme méthode de type "ping" ou "no-op" ; elle ne fait rien d'autre que de permettre au client de tester les capacités du serveur. Elle ne fait rien d'autre que de permettre au client de tester les capacités du serveur. Par exemple, elle peut être utilisée pour tester la conformité (ou l'absence de conformité) d'un proxy à la norme HTTP/1.1.

Si l'URL de la requête n'est pas un astérisque, la requête OPTIONS ne s'applique qu'aux options disponibles lors de la communication avec cette ressource.

Une réponse 200 DEVRAIT inclure tous les champs d'en-tête qui indiquent des caractéristiques facultatives mises en œuvre par le serveur et applicables à cette ressource (par exemple, Allow), y compris éventuellement des extensions non définies par la présente spécification. Le corps de la réponse, le cas échéant, DEVRAIT également inclure des informations sur les options de communication. Le format de ce corps de réponse n'est pas défini par la présente spécification, mais pourrait l'être par de futures extensions du protocole HTTP. La négociation de contenu PEUT être utilisée pour sélectionner le format de réponse approprié. Si aucun corps de réponse n'est inclus, la réponse DOIT inclure un champ Content-Length dont la valeur est "0".

Le champ d'en-tête de requête Max-Forwards PEUT être utilisé pour cibler un proxy spécifique dans la chaîne de requête. Lorsqu'un mandataire reçoit une requête OPTIONS sur une absoluteURI pour laquelle la transmission des requêtes est autorisée, le mandataire DOIT vérifier la présence d'un champ Max-Forwards. Si la valeur du champ Max-Forwards est égale à zéro ("0"), le mandataire NE DOIT PAS transmettre le message ; il doit au contraire répondre avec ses propres options de communication. Si la valeur du champ Max-Forwards est un nombre entier supérieur à zéro, le mandataire DOIT décrémenter la valeur du champ lorsqu'il transmet la demande. Si aucun champ Max-Forwards n'est présent dans la demande, la demande transmise NE DOIT PAS inclure de champ Max-Forwards.

9.4 TÊTE

La méthode HEAD est identique à la méthode GET, sauf que le serveur NE DOIT PAS renvoyer de corps de message dans la réponse. Les méta-informations contenues dans les en-têtes HTTP en réponse à une requête HEAD DEVRAIENT être identiques aux informations envoyées en réponse à une requête GET. Cette méthode peut être utilisée pour obtenir des méta-informations sur l'entité impliquée par la requête sans transférer le corps de l'entité lui-même. Cette méthode est souvent utilisée pour tester la validité, l'accessibilité et la modification récente des liens hypertextes.

La réponse à une requête HEAD PEUT être mise en cache dans le sens où les informations contenues dans la réponse PEUVENT être utilisées pour mettre à jour une entité précédemment mise en cache à partir de cette ressource. Si les nouvelles valeurs des champs indiquent que l'entité mise en cache diffère de l'entité actuelle (comme l'indiquerait un changement dans Content-Length, Content-MD5, ETag ou Last-Modified), le cache DOIT traiter l'entrée du cache comme périmée.

54voto

Quentin Points 325526

Les OPTIONS indiquent par exemple "Quelles sont les méthodes autorisées pour cette ressource".

HEAD obtient l'en-tête HTTP que vous obtiendriez si vous faisiez une requête GET, mais sans le corps. Cela permet au client de déterminer les informations relatives à la mise en cache, le type de contenu renvoyé et le code d'état renvoyé. La disponibilité n'est qu'une petite partie du problème.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X