2013-12-09 13 views
14

Ich habe gerade über die Access-Control-Allow-Methods Header, z.Standardwert für Access-Control-Allow-Methoden

Access-Control-Allow-Methods: OPTIONS, HEAD, GET 

Ich habe noch nie diesen Header (nur Access-Control-Allow-Origin) verwendet, aber ich habe CORS in der Vergangenheit zu arbeiten bekommen.

Ist die Standardeinstellung, alle Methoden zu erlauben, oder habe ich Glück mit undefiniertem Verhalten?

+0

Das scheint eine sehr gute Sache zu sein, damit der _browser_ unnötige Anfragen daran hindert, jemals Ihren Webserver zu belästigen. –

Antwort

17

Nur zur Klarstellung: Access-Control-Request-Method ist ein Anforderungsheader, der vom Browser für CORS-Preflight-Anforderungen festgelegt wird und nur einen Wert haben kann. Der Header Access-Control-Allow-Methods ist ein CORS-Antwortheader und kann mehrere Werte haben. Ich nehme an, Sie fragen nach Access-Control-Allow-Methods, weil dies der Wert ist, den der Server angibt.

Die Kopfzeile Access-Control-Allow-Methods gibt an, welche HTTP-Methoden für stammursprungsübergreifende Anforderungen an einem bestimmten Endpunkt zulässig sind. Wenn Sie alle HTTP-Methoden zulassen, ist es in Ordnung, den Wert auf Access-Control-Allow-Methods: GET, PUT, POST, DELETE, HEAD zu setzen. Wenn Sie den Endpunkt jedoch auf wenige Methoden beschränken möchten, sollten Sie nur diese Methoden einschließen.

Aus Gründen, warum Sie dies zuvor nicht gesehen haben, wird diese Kopfzeile nur für CORS-Preflight-Anfragen verwendet. Es könnte sein, dass Ihre Anwendung das CORS-Preflight nicht verwendet hat und dann etwas geändert wurde, um ein Preflight auszulösen. Werden in Ihrer Anwendung andere HTTP-Methoden als GET/POST oder benutzerdefinierte HTTP-Header verwendet?

Sie können hier mehr über CORS Preflight-Anfragen erfahren: http://www.html5rocks.com/en/tutorials/cors/

+0

Danke für die Korrektur. Und um es klarzustellen, CORS funktioniert immer noch *. Ich frage mich, ob ich es brauche, in einigen Fällen teste ich nicht. –

+0

Beantwortete meine Frage: "Diese Kopfzeile wird nur auf CORS Preflight-Anfragen verwendet". –

+0

wo können wir den Wert dieser Header sehen? In meinem Fall muss ich ein Token im Header senden, aber ich kann nur Name nicht Wert – Taran

1

Der Standard von Access-Control-Allow-Methods durch alle einfachen Methoden zu ermöglichen, auch auf Preflight-Anfragen. Da die Strömung auf https://www.w3.org/TR/cors/#preflight-request sagt (Schritt 7 von erfolgreichen preflight Anfrage):

Wenn Anforderungsverfahren für ein beliebiges Verfahren in Methoden und ist kein einfaches Verfahren, anzuwenden, den Cache und Netzwerk kein Fall empfindlichen Übereinstimmung vorhanden ist Fehlerschritte.

und die Definition der einfachen Methode ist:

Verfahren gesagt wird eine einfache Methode sein, wenn es sich um ein Kleinschreibung abhängige Übereinstimmung für eine der folgenden ist: GET HEAD POST

Also, wenn Sie eine Preflight-POST-Anfrage (aufgrund eines benutzerdefinierten HTTP-Headers, sagen), und senden Sie keine Antwort Access-Control-Allow-Methods Header, wird die Anfrage weiterhin in Ordnung gehen.