2011-12-01 19 views
7

Używam modelu backbone.js. Kiedy zapisuję model, wysyła on metodę HTTP OPTIONS do serwera po stronie firefox, ale wysyła HTTP POST z Safari.Metoda opcji HTTP z żądaniem JavaScriptu

Wiem, że to nie jest problem dotyczący backbone.js, chodzi o CORS. Po prostu sprawdzę, czy metoda, GET, POST, PUT i DELETE na serwerze, nie wykonam zadania z metodą HTTP OPTIONS.

moim zapytaniu URL jest moim api: api.foo.com i api Zwrócono: bar.com

tak, to w jaki sposób mogę kontrolować we wszystkich przeglądarkach kupna Mój api.foo.com z post HTTP nie OPCJI ? i jak mogę udostępnić zawartość strony api.foo.com wszystkim żądaniom z innych domen?

Uwaga: Mam już zmienione nagłówki odpowiedzi”s od po stronie serwera do: Access-Control-Allow-Origin: *

Odpowiedz

7

Żądanie OPTIONS jest rzeczywiście tzw preflight request of the CORS specification. To żądanie wstępne jest używane przez przeglądarki internetowe do sprawdzania, w jakich warunkach serwer zaakceptuje żądanie z danego źródła. Jeśli odpowiedź na żądanie inspekcji wstępnej była satysfakcjonująca, przeglądarka wyśle ​​rzeczywiste żądanie.

Aby zachować zgodność z tą specyfikacją, potrzebny jest serwer do odtworzenia modelu steps of preflight request processing.

+0

Jak ustawić przeglądarkę, aby nie sprawdzała, w jakich warunkach serwer zaakceptuje żądanie? i będzie sprawdzać przed każdą prośbą o wpis? Ponieważ chcę, aby każda przeglądarka, która wykonuje mój javascript, wysłała tylko metodę POST do mojego skryptu po stronie serwera –

+0

@davit Nie możesz. Prośby o krzyżowe pochodzenie nie były możliwe z [oryginalnym XHR] (http://www.w3.org/TR/XMLHttpRequest/) ze względów bezpieczeństwa ([CSRF] (https://www.owasp.org/index. php/Cross-Site_Request_Forgery)). [Poziom 2 XHR] (http://www.w3.org/TR/XMLHttpRequest2/) umożliwił to, ale wymagał zgodności ze specyfikacją CORS. – Gumbo

+0

@davit I chociaż GET jest określana jako [prosta metoda] (http://www.w3.org/TR/cors/#simple-method), [prosta prośba o przesłanie do innego źródła] (http: // www. .w3.org/TR/cors/# simple-cross-origin-request) jest możliwe tylko wtedy, gdy * flaga inspekcji * force jest fałszywa (tzn. nie jest to prośba * XMLHttpRequestUpload *) i nie ma innych pól nagłówka w żądaniu niż [proste pola nagłówka] (http://www.w3.org/TR/cors/#simple-header). – Gumbo

Powiązane problemy