Pochodzenie nie jest dozwolone przez Access-Control-Allow-Origin

Wykonuję Ajax.request Na zdalny serwer PHP w aplikacji Sencha Touch 2 (owiniętej w PhoneGap ).

Odpowiedź serwera jest następująca:

XMLHttpRequest nie może załadować http://nqatalog.negroesquisso.pt/login.php nie jest dozwolone przez Access-Control-Allow-Origin.

Jak mogę rozwiązać ten problem?

Author: hippietrail, 2012-04-13

22 answers

Jakiś czas temu napisałem artykuł na ten temat, Cross Domain AJAX .

Najprostszym sposobem, aby poradzić sobie z tym, jeśli masz kontrolę nad serwerem odpowiedzi, jest dodanie nagłówka odpowiedzi dla:

Access-Control-Allow-Origin: *

To pozwoli na cross-domain Ajax . W PHP będziesz chciał zmodyfikować odpowiedź w następujący sposób:

<?php header('Access-Control-Allow-Origin: *'); ?>

Możesz po prostu umieścić ustawienie Header set Access-Control-Allow-Origin * w konfiguracji Apache lub pliku htaccess. To działa jak urok.

Z komentarzy wynika, że jest to ważna uwaga: symbol wieloznaczny pozwoli dowolnej domenie wysyłać żądania do twojego hosta. Zalecam zastąpienie gwiazdki konkretną domeną, na której będą uruchamiane Skrypty .

 358
Author: Matt Mombrea,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-03-03 18:44:22

Jeśli nie masz kontroli nad serwerem, możesz po prostu dodać ten argument do swojego launchera Chrome: --disable-web-security.

Zauważ, że nie używałbym tego do normalnego "surfowania po sieci". Dla odniesienia, zobacz ten post: wyłącz tę samą politykę pochodzenia w Chrome .

Jeden, którego używasz Phonegap, aby zbudować aplikację i załadować ją na urządzenie, nie będzie to problemem.

 60
Author: Travis Webb,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:10:27

Jeśli używasz Apache wystarczy dodać:

<ifModule mod_headers.c>
    Header set Access-Control-Allow-Origin: *
</ifModule>

W Twojej konfiguracji. Spowoduje to, że wszystkie odpowiedzi z twojego serwera będą dostępne z dowolnej innej witryny w Internecie. Jeśli chcesz, aby usługi na Twoim hoście były używane tylko przez określony serwer, możesz zastąpić * adresem URL serwera, z którego pochodzi:

Header set Access-Control-Allow-Origin: http://my.origin.host
 41
Author: Reza S,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-08-21 07:15:58

Jeśli masz ASP.NET / ASP.NET MVC aplikacji, można dołączyć ten nagłówek poprzez WWW.plik konfiguracyjny:

<system.webServer>
  ...

    <httpProtocol>
        <customHeaders>
            <!-- Enable Cross Domain AJAX calls -->
            <remove name="Access-Control-Allow-Origin" />
            <add name="Access-Control-Allow-Origin" value="*" />
        </customHeaders>
    </httpProtocol>
</system.webServer>
 16
Author: Caio Proiete,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-03-03 18:55:28

To było pierwsze pytanie/odpowiedź, która pojawiła się dla mnie podczas próby rozwiązania tego samego problemu za pomocą ASP.NET MVC jako źródło moich danych. Zdaję sobie sprawę, że nie rozwiązuje to pytania PHP, ale jest na tyle powiązane, że może być wartościowe.

Używam ASP.NET MVC. Post na blogu Grega Branta zadziałał dla mnie. Ostatecznie tworzysz atrybut [HttpHeaderAttribute("Access-Control-Allow-Origin", "*")], który możesz dodać do akcji kontrolera.

Na przykład:

public class HttpHeaderAttribute : ActionFilterAttribute
{
    public string Name { get; set; }
    public string Value { get; set; }
    public HttpHeaderAttribute(string name, string value)
    {
        Name = name;
        Value = value;
    }

    public override void OnResultExecuted(ResultExecutedContext filterContext)
    {
        filterContext.HttpContext.Response.AppendHeader(Name, Value);
        base.OnResultExecuted(filterContext);
    }
}

A następnie używając go z:

[HttpHeaderAttribute("Access-Control-Allow-Origin", "*")]
public ActionResult MyVeryAvailableAction(string id)
{
    return Json( "Some public result" );
}
 15
Author: badMonkey,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-03-03 18:53:22

Ponieważ Matt Mombrea jest poprawny po stronie serwera, możesz napotkać inny problem, którym jest odrzucenie na białej liście.

Musisz skonfigurować phonegap.plist. (Używam starej wersji phonegap)

Dla cordova, mogą być pewne zmiany w nazewnictwie i katalogu. Ale kroki powinny być w większości takie same.

Najpierw wybierz pliki pomocnicze > PhoneGap.plist

Tutaj wpisz opis obrazka

Then under "ExternalHosts"

Dodaj wpis, o wartości być może " http://nqatalog.negroesquisso.pt " Używam * tylko do celów debugowania.

Tutaj wpisz opis obrazka

 10
Author: steve0hh,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-04-23 04:46:10
 9
Author: arun-r,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-08-18 10:58:34

Może to być przydatne dla każdego, kto potrzebuje wyjątku zarówno dla wersji "www", jak i "non-www" referrera:

 $referrer = $_SERVER['HTTP_REFERER'];
 $parts = parse_url($referrer);
 $domain = $parts['host'];

 if($domain == 'google.com')
 {
         header('Access-Control-Allow-Origin: http://google.com');
 }
 else if($domain == 'www.google.com')
 {
         header('Access-Control-Allow-Origin: http://www.google.com');
 }
 7
Author: lewsid,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-06-18 17:37:50

Dam ci proste rozwiązanie. W moim przypadku nie mam dostępu do serwera. W takim przypadku możesz zmienić politykę bezpieczeństwa w swojej przeglądarce Google Chrome , Aby zezwolić na kontrolę dostępu. Jest to bardzo proste:

  1. Tworzenie skrótu przeglądarki Chrome
  2. Kliknij prawym przyciskiem myszy ikonę skrótu - > właściwości - > Skrót - > cel

Prosta wklejka w "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.

 7
Author: Dibish,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-03-03 18:57:45

Natknąłem się na to kilka razy podczas pracy z różnymi API. Często szybką poprawką jest dodanie " & callback=?"do końca sznurka. Czasami ampersand musi być kodem postaci, a czasami"?": "?callback=?"(zobacz Forecast.io użycie API z jQuery )

 7
Author: Francis Baptiste,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 10:31:32

Jeśli piszesz rozszerzenie Chrome i pojawia się ten błąd, upewnij się, że dodałeś bazowy adres URL API do bloku uprawnień manifest.json , przykład:

"permissions": [
    "https://itunes.apple.com/"
]
 6
Author: itzg,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-02-11 00:39:49

Jeśli jesteś pod apache, po prostu dodaj .plik htaccess do katalogu z tą zawartością:

Header set Access-Control-Allow-Origin: *

Header set Access-Control-Allow-Headers: content-type

Header set Access-Control-Allow-Methods: *
 6
Author: Vero O,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-06-26 04:00:14

Jest to spowodowanePolityką tego samego pochodzenia . Zobacz więcej na Mozilla Developer Network lub Wikipedia.

Zasadniczo w twoim przykładzie musisz załadować stronę http://nqatalog.negroesquisso.pt/login.php tylko z nqatalog.negroesquisso.pt, a nie localhost.

 5
Author: antyrat,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-03-03 18:46:18

W Ruby on Rails , możesz zrobić w kontrolerze:

headers['Access-Control-Allow-Origin'] = '*'
 5
Author: fuzzyalej,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-03-03 18:55:49

Możesz sprawić, że będzie działać bez modyfikowania serwera poprzez tworzenie broswera zawierającego nagłówek Access-Control-Allow-Origin: * w odpowiedziach opcji HTTP.

W Chrome użyj tego rozszerzenia . Jeśli jesteś na Mozilli sprawdź ta odpowiedź .

 5
Author: forzagreen,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:03:07

/ Align = "left" / js, a następnie upewnij się, że unikniesz numeru portu w ten sposób:

var Project = $resource(
    'http://localhost\\:5648/api/...', {'a':'b'}, {
        update: { method: 'PUT' }
    }
);

Zobacz tutaj aby uzyskać więcej informacji na ten temat.

 5
Author: Marius,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-07-30 19:41:50

Mamy również ten sam problem z aplikacją PhoneGap testowaną w chrome. Jedna maszyna z systemem windows używamy poniżej pliku wsadowego codziennie przed otwarciem Chrome. Pamiętaj, przed uruchomieniem tego musisz wyczyścić wszystkie wystąpienia chrome z Menedżera zadań lub możesz wybrać chrome, aby nie uruchamiać się w tle.

Seria: (użyj cmd)

cd D:\Program Files (x86)\Google\Chrome\Application\chrome.exe --disable-web-security
 4
Author: abksharma,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-07-30 19:06:01

In Ruby Sinatra

response['Access-Control-Allow-Origin'] = '*' 

Dla każdego lub

response['Access-Control-Allow-Origin'] = 'http://yourdomain.name' 
 1
Author: Mikhail Chuprynski,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-06-07 20:16:51
 **Add this meta tag in your Webservice**


 header('Content-type: application/json');
 header('Access-Control-Allow-Origin: *');
 1
Author: Siddharth Shukla,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-01-12 18:40:37

Jeśli pracujesz na chrome, możesz po prostu zainstalować rozszerzenie chrome ze sklepu chrome rozwiązywanie problemów związanych z Kors.

Extension: Allow-Control-Allow-Origin Link: [https://chrome.google.com/webstore/detail/allow-control-allow-origi/nlfbmbojpeacfghkpbjhddihlkkiljbi?hl=en][1]

 1
Author: Codiee,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-12-27 07:10:19

Po otrzymaniu zapytania możesz

var origin = (req.headers.origin || "*");

Niż gdy musisz odpowiedzieć idź z czymś takim:

res.writeHead(
    206,
    {
        'Access-Control-Allow-Credentials': true,
        'Access-Control-Allow-Origin': origin,
    }
);
 0
Author: Sunrising,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-07-30 19:05:14

Symbol wieloznaczny nie jest zbyt bezpieczną opcją. Chciałbyś, żeby było to bardziej szczegółowe-sprawdź odpowiedź, którą napisałem tutaj na to samo pytanie; Jak ominąć Access-Control-Allow-Origin?

 -1
Author: Rob Quist,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:10:27