Robię Ajax.request
na zdalnym serwerze PHP w aplikacji Sencha Touch 2 ( zawartej w PhoneGap ).
Odpowiedź serwera jest następująca:
XMLHttpRequest nie może załadować http://nqatalog.negroesquisso.pt/login.php . Pochodzenie
http://localhost:8888
nie jest dozwolone przez Access-Control-Allow-Origin.
Jak mogę rozwiązać ten problem?
javascript
ajax
cors
xmlhttprequest
cross-domain
Ricardo
źródło
źródło
dataType: 'jsonp',
robiAccess-Control-Allow-Origin
i zgłosić to jako błąd.Odpowiedzi:
Niedawno napisałem artykuł na ten temat, Cross Domain AJAX .
Najłatwiejszym sposobem poradzenia sobie z tym, jeśli masz kontrolę nad serwerem odpowiadającym, jest dodanie nagłówka odpowiedzi dla:
Umożliwi to Ajax między domenami . W PHP będziesz chciał zmodyfikować odpowiedź w następujący sposób:
Możesz po prostu umieścić to
Header set Access-Control-Allow-Origin *
ustawienie w Apache konfiguracji lub pliku htaccess.Należy zauważyć, że to skutecznie wyłącza ochronę CORS, co bardzo prawdopodobne naraża użytkowników na atak . Jeśli nie wiesz, że konkretnie potrzebujesz użyć symbolu wieloznacznego, nie powinieneś go używać, a zamiast tego powinieneś dodać białą listę do swojej konkretnej domeny:
źródło
Jeśli nie masz kontroli nad serwerem, możesz po prostu dodać ten argument do programu uruchamiającego Chrome:
--disable-web-security
.Pamiętaj, że nie użyłbym tego do normalnego „surfowania po Internecie”. W celach informacyjnych zobacz ten post: Wyłącz tę samą zasadę pochodzenia w Chrome .
Jeśli użyjesz Phonegap do zbudowania aplikacji i załadowania jej na urządzenie, nie będzie to problemem.
źródło
Jeśli używasz Apache, po prostu dodaj:
w twojej konfiguracji. Spowoduje to, że wszystkie odpowiedzi z twojego serwera będą dostępne z dowolnej innej witryny w Internecie. Jeśli zamierzasz zezwolić, aby usługi na Twoim hoście były używane tylko przez określony serwer, możesz zastąpić
*
adresem URL serwera źródłowego:źródło
Jeśli masz aplikację ASP.NET / ASP.NET MVC , możesz dołączyć ten nagłówek za pomocą pliku Web.config:
źródło
To było pierwsze pytanie / odpowiedź, które pojawiło się dla mnie, gdy próbowałem rozwiązać ten sam problem za pomocą ASP.NET MVC jako źródła moich danych. Zdaję sobie sprawę, że to nie rozwiązuje PHP pytania , ale jest wystarczająco powiązane, aby być cennym.
Używam ASP.NET MVC. Blogu z Gregiem Brant pracował dla mnie. Ostatecznie tworzysz atrybut,
[HttpHeaderAttribute("Access-Control-Allow-Origin", "*")]
który możesz dodawać do akcji kontrolera.Na przykład:
A następnie używając go z:
źródło
Ponieważ Matt Mombrea jest poprawny po stronie serwera, możesz napotkać inny problem, którym jest odrzucenie białej listy.
Musisz skonfigurować phonegap.plist. (Używam starej wersji phonegap)
W przypadku Kordowa mogą wystąpić pewne zmiany w nazwie i katalogu. Ale kroki powinny być w większości takie same.
Najpierw wybierz Pliki pomocnicze> PhoneGap.plist
następnie w „ExternalHosts”
Dodaj wpis o wartości „ http://nqatalog.negroesquisso.pt ” Używam * tylko do celów debugowania.
źródło
Może to być przydatne dla każdego, kto potrzebuje wyjątku zarówno dla wersji strony odsyłającej „www”, jak i „innej niż www”:
źródło
Dam ci proste rozwiązanie tego problemu. W moim przypadku nie mam dostępu do serwera. W takim przypadku możesz zmienić zasady bezpieczeństwa w przeglądarce Google Chrome, aby zezwolić na Access-Control-Allow-Origin. To jest bardzo proste:
Proste wklejanie
"C:\Program Files\Google\Chrome\Application\chrome.exe" --allow-file-access-from-files --disable-web-security
.Lokalizacja może się różnić. Teraz otwórz Chrome, klikając ten skrót.
źródło
Wpadłem na to kilka razy podczas pracy z różnymi interfejsami API. Często szybką poprawką jest dodanie „& callback =?” na końcu ciągu. Czasami znak ampersand musi być kodem znakowym, a czasem „?”: „? Callback =?” (patrz Wykorzystanie interfejsu API Forecast.io z jQuery )
źródło
Jeśli piszesz Chrome Extension i dostać ten błąd, a następnie upewnij się, że zostały dodane bazowy URL API do swojej
manifest.json
„s uprawnienia blok , na przykład:źródło
Wynika to z polityki tego samego pochodzenia . Zobacz więcej na Mozilla Developer Network lub Wikipedia .
Zasadniczo w twoim przykładzie musisz załadować
http://nqatalog.negroesquisso.pt/login.php
stronę tylko znqatalog.negroesquisso.pt
, a nielocalhost
.źródło
jeśli korzystasz z Apache, po prostu dodaj plik .htaccess do katalogu z tą zawartością:
źródło
W Ruby on Rails możesz zrobić w kontrolerze:
źródło
Możesz sprawić, aby działał bez modyfikowania serwera, tworząc broswer zawierający nagłówek
Access-Control-Allow-Origin: *
w odpowiedziach OPCJI HTTP.W Chrome użyj tego rozszerzenia . Jeśli korzystasz z Mozilli, sprawdź tę odpowiedź .
źródło
Jeśli otrzymujesz to w Angular.js, upewnij się, że nie masz numeru portu:
Zobacz tutaj, aby uzyskać więcej informacji na ten temat.
źródło
Mamy również ten sam problem z aplikacją phonegap testowaną w chromie. Jedna maszyna z systemem Windows, której używamy codziennie poniżej pliku wsadowego przed otwarciem Chrome. Pamiętaj, że przed uruchomieniem tego musisz wyczyścić wszystkie wystąpienia chrome z menedżera zadań lub możesz wybrać chrome, aby nie działał w tle.
SERIA: (użyj cmd)
źródło
W Ruby Sinatra
dla wszystkich lub
źródło
Po otrzymaniu prośby możesz
niż kiedy musisz odpowiedzieć, idź z czymś takim:
źródło