Próbuję wykonać proste żądanie między źródłami, a Firefox konsekwentnie blokuje je z tym błędem:
Zablokowano żądanie między źródłami: ta sama zasada dotycząca pochodzenia nie zezwala na odczytywanie zdalnego zasobu pod adresem [url]. Można to naprawić, przenosząc zasób do tej samej domeny lub włączając mechanizm CORS. [url]
Działa dobrze w Chrome i Safari.
O ile wiem, ustawiłem wszystkie poprawne nagłówki w moim PHP, aby to zadziałało. Oto, czym odpowiada mój serwer
HTTP/1.1 200 OK
Date: Mon, 23 Jun 2014 17:15:20 GMT
Server: Apache/2.2.22 (Debian)
X-Powered-By: PHP/5.4.4-14+deb7u8
Access-Control-Allow-Origin: *
Access-Control-Allow-Methods: GET, POST, OPTIONS
Access-Control-Allow-Headers: Content-Type
Access-Control-Request-Headers: X-Requested-With, accept, content-type
Vary: Accept-Encoding
Content-Length: 186
Content-Type: text/html
Próbowałem użyć Angulara, jQuery i podstawowego obiektu XMLHTTPRequest, na przykład:
var data = "id=1234"
var request = new XMLHttpRequest({mozSystem: true})
request.onload = onSuccess;
request.open('GET', 'https://myurl.com' + '?' + data, true)
request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded')
request.send()
... i działa w każdej przeglądarce poza Firefox. Czy ktoś może w tym pomóc?
javascript
firefox
cors
cross-domain
Godwhacker
źródło
źródło
mozSystem
nie jest obsługiwany w przypadku zwykłych witryn internetowych, które zawierają tylko spakowane aplikacje dla systemu Firefox , więc porzuć tę opcję.Accept application/json, text/plain, */*
Accept-Encoding gzip, deflate
Accept-Language en-US,en;q=0.5
Content-Length 35
Content-Type application/x-www-form-urlencoded; charset=UTF-8
Host [url]
Origin [url]
Referer [referrer url]
User-Agent Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:30.0) Gecko/20100101 Firefox/30.0
Błąd:Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at [url]. This can be fixed by moving the resource to the same domain or enabling CORS. [url]
Odpowiedzi:
Okazuje się, że nie ma to nic wspólnego z CORS - był to problem z certyfikatem bezpieczeństwa. Wprowadzające w błąd błędy = 4 godziny bólu głowy.
źródło
withCredentials=true
na instancji XHR; w przeciwnym razie Firefox nie użył certyfikatu klienta podczas wysyłania żądania (jednak działał dobrze w Chrome).Okazało się, że moim problemem było to, że serwer, do którego wysłałem żądanie krzyżowe, miał certyfikat, który nie był zaufany.
Jeśli chcesz połączyć się z domeną międzydomenową z
https
, musisz najpierw dodać wyjątek dla tego certyfikatu.Możesz to zrobić, odwiedzając zablokowany link raz i dodając wyjątek.
źródło
Natknąłem się na to pytanie, ponieważ stwierdziłem, że żądania w przeglądarce Firefox są blokowane z komunikatem:
Po wyjęciu sobie włosów dowiedziałem się, że nowo zainstalowane rozszerzenie Firefox, Privacy Badger, blokuje żądania.
Jeśli dojdziesz do tego pytania po podrapaniu się w głowę, spróbuj sprawdzić, jakie rozszerzenia zainstalowałeś, aby zobaczyć, czy któreś z nich blokuje żądania.
Zobacz Przyczyna: żądanie CORS nie powiodło się na MDN, aby uzyskać szczegółowe informacje.
źródło
Znalazłem rozwiązanie po 2 dniach :(.
https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS#Requests_with_credentials
źródło
Jeśli nie masz `` prawdziwego '' certyfikatu (a zatem używasz certyfikatu z podpisem własnym), w FireFox możesz przejść do:
Tam podaj lokalizację, np .: https: //wwww.myserver: myport
źródło
Tylko słowo ostrzeżenia. W końcu udało mi się obejść problem z przeglądarką Firefox i CORS.
Rozwiązaniem dla mnie był ten post
Ustawienie CORS (współdzielenie zasobów między źródłami) na serwerze Apache z poprawnymi nagłówkami odpowiedzi umożliwiającymi wszystkim | Benjamin Horn
Jednak Firefox zachowywał się naprawdę, naprawdę dziwnie po ustawieniu tych nagłówków na serwerze Apache (w folderze .htaccess).
Dodałem dużo
console.log("Hi FF, you are here A")
itp., Żeby zobaczyć, co się dzieje.Z początku wyglądał, jakby wisiał
xhr.send()
. Ale potem odkryłem, że nie dotarło do tego stwierdzenia. Postawiłemconsole.log
tuż przed nim i nie dotarłem - mimo że między ostatnimconsole.log
a nowym nie było nic . Po prostu zatrzymał się między dwomaconsole.log
.Zmiana kolejności wierszy, usuwanie, aby sprawdzić, czy w pliku nie ma dziwnych znaków. Nic nie znalazłem.
Ponowne uruchomienie Firefoksa rozwiązało problem.
Tak, powinienem zgłosić błąd. Po prostu jest tak dziwny, więc nie wiem, jak go odtworzyć.
UWAGA : I, och, po prostu wykonałem
Header always set
części, a nieRewrite*
część!źródło
Poprostu dodaj
do
.htaccess
pliku w katalogu głównym witryny, z którą próbujesz się połączyć.źródło
Dla potomności sprawdź także dzienniki serwera, aby zobaczyć, czy żądany zasób zwraca 200.
Napotkałem podobny problem, w którym wszystkie właściwe nagłówki były zwracane w żądaniu ajax przed lotem, ale przeglądarka zgłosiła, że rzeczywiste żądanie zostało zablokowane z powodu złych nagłówków CORS.
Okazuje się, że żądana strona zwróciła błąd 500 z powodu złego kodu, ale tylko wtedy, gdy została pobrana przez CORS. Przeglądarka (zarówno Chrome, jak i Firefox) omyłkowo zgłosiła brak nagłówka Access-Control-Allow-Origin zamiast powiedzieć, że strona zwróciła 500.
źródło
Spróbuj tego, to powinno rozwiązać twój problem
W swoim config.php dodaj www pre w swojej domenie.com. Na przykład:
Dodaj to do swojego pliku .htaccess
źródło
Dla mnie okazuje się, że
Access-Control-Allow-Origin
ustawiłem nagłówek odpowiedzi na konkretny (i poprawny),host.com
ale musiał on zostać zwrócony jakohttp://host.com
zamiast tego. Co robi Firefox? Po cichu połyka żądanie GET i zwraca status 0 do XHR, bez żadnych ostrzeżeń wysyłanych do konsoli javascript, podczas gdy w przypadku innych podobnych błędów przynajmniej coś powie. Ai ai.źródło
Aby debugować, sprawdź dzienniki serwera, jeśli to możliwe. Firefox zwraca błędy CORS w konsoli z wielu różnych powodów.
Jednym z powodów jest także wtyczka uMatrix (i chyba NoScript i podobne).
źródło
Miałem podobny problem i myślę, że warto zarejestrować się, jak to naprawiłem:
Mam system zbudowany w zasadzie na Symfony 3. Dla celów samodzielnej nauki i wydajności zdecydowałem się napisać kilka skryptów używając GoLang, także API z publicznym dostępem.
My Go API oczekuje parametrów formatu Json, a także zwraca odpowiedź w formacie Json
Aby nazwać te GoApi, których używam, w większości, $ .ajax (jQuery) Pierwszy test był oszustwem: (nie) słynne "Zablokowano żądanie Cross-Origin"! Następnie próbowałem ustawić „Access-Control-Allow-Origin: *” na apache conf, htaccess, php, javascript i gdziekolwiek mogłem znaleźć w google!
Ale nawet ten sam frustrujący błąd !!!
Rozwiązanie było proste: musiałem wysyłać żądania „POST” zamiast „GET”.
Aby to osiągnąć, musiałem dostosować zarówno GoLang, jak i JavaScript do korzystania z GET! Gdy to zrobię, żadne żądanie cross-Origin nie będzie już blokowane !!!
Mam nadzieję, że to pomoże
PS:
Używam Apache i Vhost na Directory Block, który mam
Pamiętaj: „*” oznacza, że będziesz akceptować prośby od każdego !!! (Co może oznaczać brak bezpieczeństwa) W moim przypadku jest to w porządku, ponieważ będzie to publiczne API
PS2: Moje nagłówki
Nagłówki odpowiedzi
Żądanie nagłówków (469 B)
źródło
Jeśli powyższe odpowiedzi nie pomogą, sprawdź, czy serwer zaplecza działa, czy nie, ponieważ w moim przypadku nastąpiła awaria serwera i ten błąd okazuje się całkowicie mylący.
źródło
W moim przypadku był to mój ADBLOCKER ! Z jakiegoś powodu został włączony na moim hoście lokalnym i spowodował ten błąd w przeglądarce Firefox.
Wyłączenie go lub odinstalowaniu ten plugin powinien to naprawić.
W twoim przypadku może to nie być adblocker, ale inna wtyczka Firefox. Najpierw przetestuj to w trybie incognito bez wtyczek, aby określić, czy to jest problem, a następnie systematycznie wyłączaj wtyczki, aż znajdziesz winowajcę.
źródło
Pliki są oczywiste. Utwórz plik, nazwij go dowolnie. W moim przypadku jq2.php.
Teraz dodamy silnik, utworzymy plik, nazwij go jak chcesz. W moim przypadku jest to gs.php.
Starałem się, aby przykład był tak prosty, jak to tylko możliwe. A ponieważ wykonuje odsyłacz przy każdym naciśnięciu klawisza, przydział Twojego interfejsu API zostanie zużyty dość szybko.
Oczywiście nie ma końca rzeczy, które możemy zrobić, jak umieszczanie danych w tabeli, wysyłanie do bazy danych i tak dalej.
źródło