Używam .htaccess do przepisywania adresów URL i użyłem podstawowego tagu html, aby to działało.
Teraz, kiedy próbuję wysłać żądanie AJAX, pojawia się następujący błąd:
Nie można załadować XMLHttpRequest
http://www.example.com/login.php
. Żądany zasób nie zawiera nagłówka „Access-Control-Allow-Origin”.http://example.com
Dlatego Origin „ ” nie ma dostępu.
javascript
jquery
ajax
cors
xmlhttprequest
Th3lmuu90
źródło
źródło
http://wordicious.com
to inna dziedzina niżhttp://www.wordicious.com/
, stąd błąd. Przy okazji, jeśli teraz działa i wrócił sam, prawdopodobnie powinieneś usunąć pytanie.Odpowiedzi:
Użyj
addHeader
Zamiast używaćsetHeader
metody,*
w powyższej linii pozwoliaccess to all domains
.Za pozwolenie
access to specific domain only
:Sprawdź to
blog post
.źródło
Dlaczego pojawia się błąd:
Kod JavaScript jest ograniczony przez zasady tego samego pochodzenia , co oznacza, że ze strony pod adresem
www.example.com
można wysyłać żądania (AJAX) tylko do usług znajdujących się w dokładnie tej samej domenie, w takim przypadku dokładniewww.example.com
( nieexample.com
- bezwww
- lubwhatever.example.com
).W Twoim przypadku kod Ajax próbuje dotrzeć do usługi
http://wordicious.com
ze strony znajdującej się pod adresemhttp://www.wordicious.com
.Chociaż bardzo podobne, są one nie tej samej domenie. A jeśli nie znajdują się w tej samej domenie, żądanie zakończy się powodzeniem tylko wtedy, gdy odpowiedź celu zawiera rozszerzenie
Access-Control-Allow-Origin
nagłówek.Jako Twoja strona / usługa pod adresem
http://wordicious.com
nigdy nie została skonfigurowana do przedstawiania takiego nagłówka, wyświetlany jest ten komunikat o błędzie.Rozwiązanie:
Jak już powiedziano, domena źródłowa (gdzie znajduje się strona z JavaScriptem) i docelowa (gdzie JavaScript próbuje dotrzeć) domeny muszą być dokładne taka sama.
Twoja sprawa wygląda na literówkę. Wygląda na to
http://wordicious.com
ihttp://www.wordicious.com
faktycznie są tym samym serwerem / domeną. Aby to naprawić, wpisz cel i źródło jednakowo: spraw, aby kod Ajax żądał stron / usług, abyhttp://www.wordicious.com
niehttp://wordicious.com
. (Może względnie umieść docelowy adres URL, na przykład'/login.php'
bez domeny).Bardziej ogólna uwaga:
Jeśli problem nie jest literówką, jak wydaje się to pytanie, rozwiązaniem byłoby dodanie
Access-Control-Allow-Origin
domeny docelowej . Dodanie zależy oczywiście od serwera / języka za tym adresem. Czasami wystarczy zmienna konfiguracyjna w narzędziu. Innym razem będziesz musiał samodzielnie dodać nagłówki za pomocą kodu.źródło
W przypadku serwera .NET można to skonfigurować w pliku web.config, jak pokazano poniżej
Na przykład powiedzmy, że jeśli domena serwera to http://live.makemypublication.com, a klient to http://www.makemypublication.com, to skonfiguruj w pliku web.config serwera, jak poniżej
źródło
Jeśli otrzymasz ten komunikat o błędzie z przeglądarki:
kiedy próbujesz wysłać żądanie Ajax POST / GET do zdalnego serwera, na który nie masz wpływu, zapomnij o tej prostej poprawce:
To, co naprawdę musisz zrobić, zwłaszcza jeśli używasz JavaScript tylko do wykonania żądania Ajax, to wewnętrzny serwer proxy, który przyjmuje zapytanie i wysyła je do zdalnego serwera.
Najpierw w JavaScript wykonaj wywołanie Ajax do własnego serwera, na przykład:
Następnie utwórz prosty plik PHP o nazwie proxy.php, aby opakować dane POST i dołączyć je do zdalnego serwera URL jako parametry. Podaję przykład, jak omijam ten problem za pomocą interfejsu API wyszukiwania hoteli Expedia:
Wykonując:
Po prostu wykonujesz to samo zapytanie, ale po stronie serwera i po tym powinno działać dobrze.
źródło
Musisz to dodać na początku swojej strony php "login.php"
źródło
musisz umieścić klucze / wartości nagłówków w odpowiedzi metody options. na przykład, jeśli masz zasób pod adresem http://mydomain.com/myresource , to w kodzie serwera piszesz
źródło
Zasadniczo zmień odpowiedź nagłówka API, dodając następujące dodatkowe parametry.
Access-Control-Allow-Credentials: prawda
Access-Control-Allow-Origin: *
Ale to nie jest dobre rozwiązanie, jeśli chodzi o bezpieczeństwo
źródło
Aby obejść ten problem, należy użyć zwrotnego proxy działającego na hoście „źródłowym” i przekazującego do serwera docelowego, takiego jak Fiddler:
Link tutaj: http://docs.telerik.com/fiddler/configure-fiddler/tasks/usefiddlerasreverseproxy
Lub Reverse proxy Apache ...
źródło
Dodaj to do pliku PHP lub głównego kontrolera
źródło
header("Access-Control-Allow-Credentials: true");
Rozwiązano poniższy wpis w httpd.conf
źródło
Proszę znaleźć funkcję używaną w XMLHTTPREQUEST w Javascript do konfigurowania nagłówków żądań.
Źródła: https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/setRequestHeader
źródło