2012-03-09 10 views
5

Próbuję zezwolić na dostęp do każdej poddomeny w mojej witrynie, aby umożliwić wywoływanie krzyżowych subdomen AJAX. Czy istnieje sposób, aby określić wszystkie subdomeny witryny jak *.example.com lub alternatywnie, dlaczego nie po pracy, gdy mam więcej niż jedną domenę Wystawione:Określ wiele subdomen z kontrolą dostępu Pochodzenie

header('Access-Control-Allow-Origin: http://api.example.com http://www.example.com'); 

Przeczytałem poprzez następujące pytanie, które wydaje się być podobny , jeśli nie taki sam jak ten, inny niż fakt, że chcę mieć dostęp do subdomen, a ten odnosi się do domen ogólnych.

Access-Control-Allow-Origin Multiple Origin Domains?

Jeśli powyższe pytanie jest rozwiązanie tego problemu, to jak jestem w stanie odzyskać pochodzenie z nagłówka. Wygląda na to, że $ _SERVER ['HTTP_ORIGIN'] jest bardzo niewiarygodny i nie ma nawet przeglądarki. Muszę być w stanie zobaczyć pochodzenie w dowolnej przeglądarce, która może pokazać błąd podczas próby wysłania wywołania AJAX za pomocą javascript.

+0

Jak już powiedziałeś, pierwsza część Twojego pytania została podana w linku. Odnośnie drugiego pytania: jeśli przeglądarka próbuje połączenia Ajax, które jest zabronione przez zasady dotyczące domen krzyżowych, żądanie zakończy się niepowodzeniem i nie dotrze do serwera w ogóle. Błąd będzie musiał być obsługiwany w przeglądarce. –

+0

Jestem świadomy, że otrzymam błąd, ale ten błąd zostanie dostarczony po próbie połączenia się z zewnętrznym plikiem. Jeśli plik go odrzuci, zostanie zgłoszony błąd. Jeśli ustawię nagłówek, aby umożliwić dostęp do wszystkich, to będzie działać, ale jest to dla mnie zbyt otwarte, dlatego chciałbym ustawić go jako odpowiadający początkowi żądania. Dlatego chciałbym wiedzieć, jak uzyskać pochodzenie żądania za pomocą PHP. –

+0

Czy możesz wyjaśnić, co masz na myśli przez "$ _SERVER [" HTTP_ORIGIN '] jest bardzo niewiarygodne, a nawet nie przeglądać "? $ _SERVER ['HTTP_ORIGIN'] jest wartością po stronie serwera, która nie zostanie wykonana w przeglądarce. – monsur

Odpowiedz

18

Rozwiązaniem tego problemu jest użycie zmiennej $ _SERVER ['HTTP_ORIGIN'] w celu ustalenia, czy żądanie pochodzi z dozwolonej domeny. Następnie ustawiono to:

header('Access-Control-Allow-Origin: '.$_SERVER['HTTP_ORIGIN']); 
-2

Oto dobry artykuł o zapytanie: http://hacks.mozilla.org/2009/07/cross-site-xmlhttprequest-with-cors/

Jeśli to nie jest wystarczająco dobry albo nie działa, albo trzeba Proxy tak: https://raw.github.com/cowboy/php-simple-proxy/master/ba-simple-proxy.php

Następnie można wywołać Pełnomocnika z parametrami na przykład: http://www.example.com/ba-simple-proxy.php?url=https://api.example.com

+0

"Oto dobry artykuł na temat twojego pytania" - ten artykuł w ogóle nie odnosi się do pytania. – Quentin

+0

"Jeśli to nie wystarczy lub nie działa albo potrzebujesz takiego proxy" - Nie. Proxy nie jest potrzebne. Zobacz zaakceptowaną odpowiedź. – Quentin

Powiązane problemy