OPTIONS ist die HTTP-Methode, mit der ein Client erfragt, was unter einer Adresse erlaubt ist. Der Server antwortet mit den zulässigen Methoden und Regeln, ohne dass eine eigentliche Aktion stattfindet.
- OPTIONS
Die HTTP-Methode zum Abfragen der Kommunikationsoptionen einer Ressource oder eines Servers.
Beispiel: „Vor dem PUT an die fremde Schnittstelle schickt der Browser selbstständig eine OPTIONS-Anfrage.“Verwandt: CORS, die Regeln für Anfragen an fremde Server, bei denen OPTIONS die Hauptrolle spielt.
OPTIONS als Preflight
Im Alltag begegnet OPTIONS fast nur so: Will eine Seite per JavaScript eine Anfrage an einen anderen Server schicken, die über einfache Formulardaten hinausgeht, fragt der Browser vorher per OPTIONS nach, ob das erlaubt ist. Das gilt etwa für PUT, DELETE, JSON im Body oder eigene Header.
Der Server antwortet mit Headern wie Access-Control-Allow-Methods und Access-Control-Allow-Origin. Erst wenn diese passen, schickt der Browser die eigentliche Anfrage.
OPTIONS im Vergleich mit den anderen Methoden
Die Übersicht zeigt alle neun HTTP-Methoden. Sicher heißt, dass eine Methode nichts verändert; idempotent heißt, dass mehrfaches Senden dasselbe Ergebnis hat wie einfaches.
Methode | Wofür | Sicher | Idempotent |
|---|---|---|---|
Ressource abrufen, ohne etwas zu ändern | ja | ja | |
wie GET, aber nur die Kopfzeilen | ja | ja | |
Daten senden, meist etwas Neues anlegen | nein | nein | |
Ressource vollständig ersetzen | nein | ja | |
Ressource teilweise ändern | nein | nein | |
Ressource löschen | nein | ja | |
OPTIONS | erlaubte Methoden erfragen | ja | ja |
Tunnel über einen Proxy aufbauen | nein | nein | |
Anfrage zur Fehlersuche zurückspiegeln | ja | ja |
Wenn OPTIONS-Anfragen scheitern
Eine Anfrage, die mit curl funktioniert und im Browser scheitert, ist fast immer ein Problem mit dem Preflight. In der Netzwerkansicht der Entwicklerwerkzeuge erscheint dann eine OPTIONS-Anfrage mit Fehler vor der eigentlichen Anfrage.
Die Lösung liegt auf dem Server, der die passenden Header senden muss. Im Browser lässt sich das nicht umgehen, und das ist gewollt.