2013-12-09 15 views
14

Właśnie dowiedziałem się o nagłówku Access-Control-Allow-Methods, npWartość domyślna dla Access-Control-Allow-Metody

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

Nigdy nie stosować ten nagłówek (tylko Access-Control-Allow-Origin), ale mam zdobyć CORS do pracy w przeszłości.

jest domyślnym aby zezwolić na wszystkie sposoby, albo ja zdobyć szczęście z nieokreślonego zachowania?

+0

wydawać się bardzo dobrą rzeczą do zrobienia, aby pozwolić _browser_ zatrzymać unneccesary żądania od zawsze przeszkadza swój serwer WWW. –

Odpowiedz

17

Aby wyjaśnić, Access-Control-Request-Method to nagłówek żądania, który jest ustawiony przez przeglądarkę na żądanie inspekcji CORS i może mieć tylko jedną wartość. Nagłówek Access-Control-Allow-Methods jest nagłówkiem odpowiedzi CORS i może mieć wiele wartości. Zakładam, że pytasz o numer Access-Control-Allow-Methods, ponieważ jest to wartość określona przez serwer.

Nagłówek Access-Control-Allow-Methods wskazuje, jakie metody HTTP są dozwolone w konkretnym punkcie końcowym dla żądań cross-pochodzenia. Jeśli zezwolisz na wszystkie metody HTTP, to możesz ustawić wartość na taką, jak Access-Control-Allow-Methods: GET, PUT, POST, DELETE, HEAD. Jeśli jednak chcesz ograniczyć punkt końcowy tylko do kilku metod, powinieneś tylko uwzględnić te metody.

Na pytanie dlaczego nie zostały widząc tego wcześniej, ten nagłówek jest używany tylko na Cors inspekcji wstępnej wniosków. Możliwe, że twoja aplikacja nie używała preflightu CORS, a potem coś zmieniło się, by wywołać preflight. Czy aplikacja używa jakichkolwiek metod HTTP innych niż GET/POST, czy też niestandardowych nagłówków HTTP?

Możesz dowiedzieć się więcej o Cors inspekcji wstępnej wniosków tutaj: http://www.html5rocks.com/en/tutorials/cors/

+0

Dzięki za poprawkę. A żeby wyjaśnić, CORS nadal * działa *. Zastanawiam się, czy tego potrzebuję, w niektórych przypadkach nie testuję. –

+0

Odpowiedziałem na moje pytanie: "ten nagłówek jest używany tylko w przypadku żądań wstępnych CORS". –

+0

gdzie możemy zobaczyć wartość tych nagłówków? W moim przypadku muszę wysłać token w nagłówku, ale widzę tylko nazwę nie wartości – Taran

1

Domyślnym Access-Control-Allow-Methods jest umożliwienie przez wszystkich prostych metod, nawet przed lotem żądań. Ponieważ przepływ na https://www.w3.org/TR/cors/#preflight-request mówi (krok 7 udanych życzenie prefligtu):

Jeżeli metoda żądania nie jest rozróżniana mecz dla każdej metody w metod i nie jest to prosta metoda, należy zastosować pamięć podręczną i sieci kroki błędu.

oraz określenia prostej metody jest:

Sposób mówi się, że to prosta metoda, jeśli jest to wielkość liter pasuje do jednego z następujących powodów: Get HEAD POST

Więc jeśli masz preflighted żądania POST (ze względu na niestandardowy nagłówek HTTP, powiedzmy), a nie wysyłać nagłówek Access-Control-Allow-Methods odpowiedzi, wniosek będzie nadal iść do przodu w porządku.