Comment répondre à une HTTP OPTIONS de demande?
HTTP OPTIONS
méthode est censé être utilisé pour déterminer quels sont les autres méthodes le serveur prend en charge sur une ressource donnée. Étant donné que, j'ai deux questions:
-
Quoi cette réponse ressemble? J'ai vu des exemples avec CSV listes
Public
,Allow
, et mêmeAccess-Control-Allow-Methods
en-têtes. Sont-ils tous nécessaires? Quelle est la différence? La RFC 2616 ne semble pas être très utile ici. -
Serait-il approprié d'utiliser pour la liste des actions d'une ressource de soutien à la non-REST-API de l'environnement? Par exemple, si mon
ConversionController
soutient l'actionconvert
, serait une réponse comme cela un sens:
Demande:
OPTIONS /conversion HTTP/1.1
Réponse:
HTTP/1.1 200 OK
...
Allow: CONVERT
...
Allow: CONVERT
??
Vous devez vous connecter pour publier un commentaire.
RFC 2616 définit "Autoriser" (http://greenbytes.de/tech/webdav/rfc2616.html#rfc.section.14.7). "Public" n'est pas en utiliser plus. "Access-Control-Allow-Méthodes" est défini dans la spécification de la SCRO (voir http://www.w3.org/TR/cors/).
Allow
etAccess-Control-Allow-Methods
être envoyé, ou tout simplement le dernier?OPTIONS
peut-être contenu. À partir de la RFC 2616: "Si la demande d'OPTIONS comprend une entité-corps (comme indiqué par la présence d'un Contenu ou de Longueur d'Encodage de Transfert), puis le type de support DOIT être indiquée par un champ Content-Type. Bien que cette spécification ne définit pas les utiliser pour une telle entité, de futures extensions HTTP pourraient utiliser les OPTIONS de corps pour le rendre plus détaillée des requêtes sur le serveur. Un serveur qui ne supporte pas une telle extension PEUT jeter le corps de la requête."Allow
etAccess-Control-Allow-Methods
sont nécessaires si vous souhaitez utiliser la SCRO. L'ancien spécifie les méthodes qui sont pris en charge en général et ce dernier spécifie les méthodes qui sont autorisés pour la croix-les requêtes d'origine. Par exemple, vous pouvez autoriserGET
,POST
,PUT
etDELETE
pour votre propre origine, mais seulement de permettreGET
etPOST
cross-origin.En réponse au titre: "Comment répondre à une HTTP OPTIONS de demande?" Pour répondre à cela, je veux savoir pourquoi vous souhaitez répondre à une demande? Qui/qu'est-ce que vous envoyant une demande d'OPTIONS, et pourquoi? De nombreux serveurs publics de répondre avec une certaine forme de "erreur" ou "non autorisé" (500, 501, 405). Donc, sauf si vous êtes dans une situation particulière où vos clients seront raisonnablement les OPTIONS d'envoi des demandes et attend utiles/informations pertinentes (par ex., WebDAV, de la SCRO), vous voudrez probablement pour répondre à: "ne pas le faire."
En termes de votre question sur les "OPTIONS de conversion /HTTP/1.1" demande: sauf si vous savez qu'il y a un client de votre serveur, un client qui enverrait une des OPTIONS de demande de "conversion" et attendre une réponse avec "Autoriser: CONVERTIR," la réponse est non: il ne serait pas logique de faire réagir comme ça. Je pense que la plupart des implémentations qui ne OPTIONS de support et de répondre avec "Autoriser", répondent à la norme méthodes HTTP.
Voici un excellent article sur le sujet.
Résumé: OPTIONS est immédiatement problématique, car elle ne prend pas en charge la mise en cache. Alternatives: à l'échelle du serveur de métadonnées: essayez bien connu d'URI. Des ressources spécifiques: essayez d'utiliser une Lien en-tête sur ses réponses, ou d'un lien dans le format de représentation de cette ressource.
Enfin, si ce que vous êtes après est une description du service, avoir un regard sur WADL ou RSDL.
EDIT:
dotnetguy fait un bon point dans le commentaire ci-dessous: OPTIONS est indéniablement précieuse dans certains contextes (par exemple, de la SCRO); je n'ai certainement pas dire le contraire.
Qu'est ce qu'un HTTP OPTIONS de demande?
C'est une demande de la part du client de savoir ce que les méthodes HTTP, le serveur va permettre, comme
GET
,POST
, etc.Demande
La demande pourrait ressembler à ceci lors de la demande sur les options pour une ressource particulière:
ou comme cela, lors de la demande sur le serveur en général:
Réponse
La réponse devrait contenir une
Allow
- tête avec les méthodes autorisées:Pourquoi le serveur reçoit un HTTP OPTIONS de demande?
Façon de répondre à une HTTP OPTIONS de demande?
Allowed
en-tête et même document de votre API dans le corps.Access-Control-Request-*
en-têtes.405 Method Not Allowed
ou501 Not Implemented
.Comment puis-je cesser de se HTTP OPTIONS de demande?
PUT
ouDELETE
, ouPOST
avecapplication/json
). Seulement effectuer simple demande.Voir aussi