Die HTTP- OPTIONS
Methode wird angeblich verwendet, um zu bestimmen, welche anderen Methoden der Server für eine bestimmte Ressource unterstützt. Angesichts dessen habe ich zwei Fragen:
Wie sieht diese Antwort aus? Ich habe Beispiele mit CSV - Listen gesehen in
Public
,Allow
und sogarAccess-Control-Allow-Methods
Header. Werden sie alle gebraucht? Was ist der Unterschied? RFC 2616 scheint hier nicht sehr hilfreich zu sein.Wäre es angemessen, dies zu verwenden, um die Aktionen aufzulisten, die eine Ressource in einer Nicht-REST-API-Umgebung unterstützt? Wenn ich zum Beispiel
ConversionController
die Aktion unterstützeconvert
, wäre eine solche Antwort sinnvoll:
Anfrage:
OPTIONS /conversion HTTP/1.1
Antwort:
HTTP/1.1 200 OK
...
Allow: CONVERT
...
Allow: CONVERT
??Antworten:
RFC 2616 definiert "Zulassen" ( http://greenbytes.de/tech/webdav/rfc2616.html#rfc.section.14.7 ). "Öffentlich" wird nicht mehr verwendet. "Access-Control-Allow-Methods" ist in der CORS-Spezifikation definiert (siehe http://www.w3.org/TR/cors/ ).
quelle
Allow
undAccess-Control-Allow-Methods
gesendet, oder einfach nur die letzteren werden?OPTIONS
möglicherweise Inhalt. Aus RFC 2616: "Wenn die OPTIONS-Anforderung einen Entity-Body enthält (wie durch das Vorhandensein von Content-Length oder Transfer-Encoding angezeigt), MUSS der Medientyp durch ein Content-Type-Feld angegeben werden. Obwohl diese Spezifikation nicht definiert ist Bei jeder Verwendung für einen solchen Body können zukünftige Erweiterungen von HTTP den OPTIONS-Body verwenden, um detailliertere Abfragen auf dem Server durchzuführen. Ein Server, der eine solche Erweiterung nicht unterstützt, kann den Anfragetext verwerfen. "Allow
undAccess-Control-Allow-Methods
erforderlich sind, wenn Sie CORS verwenden möchten. Ersteres gibt an, welche Methoden im Allgemeinen unterstützt werden, und letzteres gibt an, welche Methoden für Ursprungsanfragen zulässig sind. Beispielsweise können Sie , und für Ihren eigenen Ursprung zulassenGET
, aber nur und für den Kreuzursprung zulassen .POST
PUT
DELETE
GET
POST
Antwort auf den Titel: "Wie antworte ich auf eine HTTP OPTIONS-Anfrage?" Um das zu beantworten, möchte ich wissen, warum Sie auf eine OPTIONS-Anfrage antworten möchten. Wer / was sendet Ihnen eine OPTIONS-Anfrage und warum? Viele öffentliche Server antworten mit einer Form von "Fehler" oder "nicht zulässig" (500, 501, 405). Wenn Sie sich also nicht in einer bestimmten Situation befinden, in der Ihre Kunden vernünftigerweise OPTIONS-Anfragen senden und nützliche / aussagekräftige Informationen zurück erwarten (z. B. WebDAV, CORS), möchten Sie wahrscheinlich antworten: "Tun Sie das nicht."
In Bezug auf Ihre Frage zur Anforderung "OPTIONEN / Konvertierung HTTP / 1.1": Es sei denn, Sie wissen, dass es einen Client Ihres Servers gibt, einen Client, der eine OPTIONEN-Anforderung an "/ Konvertierung" sendet und eine Antwort mit "Zulassen: KONVERTIEREN" erwartet "Die Antwort ist nein: Es wäre nicht sinnvoll, so zu antworten. Ich denke, dass die meisten Implementierungen, die OPTIONEN unterstützen und mit "Zulassen" antworten, mit Standard-HTTP-Methoden antworten.
Hier ist ein großartiger Artikel zum Thema .
Zusammenfassung: OPTIONEN sind sofort problematisch, da sie das Caching nicht unterstützen. Alternativen: Serverweite Metadaten: Probieren Sie bekannte URIs aus . Ressourcenspezifisch: Verwenden Sie einen Link-Header für die Antworten oder einen Link im Darstellungsformat für diese Ressource.
Wenn Sie eine Servicebeschreibung suchen, schauen Sie sich WADL oder RSDL an .
BEARBEITEN:
dotnetguy macht im folgenden Kommentar einen guten Punkt: OPTIONEN sind in bestimmten Kontexten (z. B. CORS) unbestreitbar wertvoll; Ich wollte auf keinen Fall etwas anderes vorschlagen.
quelle
Was ist eine HTTP OPTIONS-Anfrage?
Es ist eine Anforderung von dem Client zu wissen , was HTTP - Methoden der Server ermöglichen wird, wie
GET
,POST
etc.Anfrage
Die Anfrage könnte folgendermaßen aussehen, wenn Sie nach den Optionen für eine bestimmte Ressource fragen:
oder so, wenn Sie nach dem Server im Allgemeinen fragen:
Antwort
Die Antwort würde einen
Allow
Header mit den zulässigen Methoden enthalten:Warum empfängt der Server eine HTTP OPTIONS-Anforderung?
Wie antworte ich auf eine HTTP OPTIONS-Anfrage?
Allowed
Header antworten und sogar Ihre API im Body dokumentieren .Access-Control-Request-*
Headern antworten .405 Method Not Allowed
oder antworten501 Not Implemented
.Wie höre ich auf, HTTP-OPTIONEN-Anfragen zu erhalten?
PUT
oderDELETE
oderPOST
mitapplication/json
). Führen Sie nur einfache Anfragen aus .Siehe auch
quelle