Dlaczego widzę błąd "pochodzenie nie jest dozwolone przez Access-Control-Allow-Origin" tutaj? [duplikat]

To pytanie ma już odpowiedź tutaj:

Widzę następujący błąd:

Origin http://localhost:8080 is not allowed by Access-Control-Allow-Origin

Z tym kodem:

var http = new getXMLHttpRequestObject();
var url = "http://gdata.youtube.com/action/GetUploadToken";
var sendXML = '<?xml version="1.0"?><entry xmlns="http://www.w3.org/2005/Atom"'+
    'xmlns:media="http://search.yahoo.com/mrss/'+
    'xmlns:yt="http://gdata.youtube.com/schemas/2007">'+
    '<media:group><media:title type="plain">My First API</media:title>'+
    '<media:description type="plain">First API</media:description>'+
    '<media:category scheme="http://gdata.youtube.com/schemas/2007/categories.cat">People</media:category>'+
    '<media:keywords>first, api</media:keywords></media:group></entry>';
http.open("POST", url, true);
http.setRequestHeader("Authorization", "AuthSub token=" + AccessToken);
http.setRequestHeader("X-GData-Key", "key="+ dev_key);
http.setRequestHeader("Content-Type", "application/atom+xml; charset=UTF-8");

http.onreadystatechange = function() {
    if(http.readyState == 4) {
        alert(http.responseXML);
    }
}
http.send(sendXML);
Co może to spowodować i jak to rozwiązać?
Author: reallynice, 2012-02-16

11 answers

Javascript jest ograniczony przy wykonywaniu żądań ajax poza bieżącą domeną.

  • Ex 1: Twoja domena jest example.com i chcesz złożyć wniosek do test.com = > nie możesz.
  • Ex 2: Twoja domena to example.com i chcesz złożyć wniosek do inner.example.com = > nie możesz.
  • Ex 3: Twoja domena to example. com:80 i chcesz wysłać zapytanie do example. com:81 = > nie możesz
  • EX 4: Twoja domena to example.com i chcesz złożyć wniosek do example.com = > możesz.

Javascript jest ograniczony przez "same origin policy" ze względów bezpieczeństwa, więc złośliwy skrypt nie może skontaktować się ze zdalnym serwerem i wysłać poufnych danych.

Jsonp jest innym sposobem korzystania z javascript. Składasz żądanie, a wyniki są hermetyzowane w funkcji zwrotnej, która jest uruchamiana w kliencie. Jest to tak samo jak łączenie nowego znacznika script w części head twojego html (wiesz, że możesz ładować skrypty z różnych domen niż twój tutaj).
Aby jednak korzystać z jsonp, serwer musi być poprawnie skonfigurowany. Jeśli tak nie jest, nie możesz używać jsonp i musisz polegać na serwerze proxy (PHP, ASP, itp.). Istnieje wiele przewodników związanych z tym tematem, wystarczy go google!

 169
Author: andreapier,
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
2016-03-23 03:08:54

XMLHttpRequest nie pozwoli Ci dotrzeć do localhost:8080 z powodu "tej samej polityki pochodzenia".

Możesz zezwolić na żądania z nowoczesnych przeglądarek, dodając nagłówek do odpowiedzi na localhost:8080:

Access-Control-Allow-Origin: *

Możesz to zrobić dodając dyrektywy do serwera HTTP lub dodając nagłówki za pomocą kodu po stronie serwera (PHP, Ruby,...).

Więcej informacji o żądaniach ajax na stronie https://developer.mozilla.org/en/http_access_control

 88
Author: Sunny,
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-19 09:26:21

Jeśli używasz Chrome, prostym obejściem (tylko w celach programistycznych) jest użycie opcji --disable-web-security.

 37
Author: Deqing,
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-11-27 14:06:32

Dodaj globalny.asax w Twoim roztworze.

Dodaj

HttpContext.Current.Response.AddHeader("Access-Control-Allow-Origin", "*");

W

protected void Application_BeginRequest(object sender, EventArgs e)
{
}
 10
Author: Ammar Khan,
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-01-20 02:11:39

Jeśli używasz apache ' a, to działa: put this in / create a .plik htaccess w publicznym katalogu głównym i dodaj inne rozszerzenia plików, których możesz potrzebować.

<FilesMatch "\.(ttf|otf|eot|woff|jpg|png|jpeg|gif|js|json|html|css)$">
  <IfModule mod_headers.c>
    Header set Access-Control-Allow-Origin "*"
  </IfModule>
</FilesMatch>
 9
Author: Eric Leroy,
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-11-08 05:50:20

Dla rozwoju lokalnego można użyć narzędzia do modyfikowania nagłówków odpowiedzi HTTP. Na przykład Charles jest w stanie to zrobić za pomocą dołączonego narzędzia rewrite: Rewrite Tool

Wystarczy dodać nową regułę dla docelowej domeny / lokalizacji za pomocą:

Type: Add Header
Where: Response
Replace
     Name: Access-Control-Allow-Origin
     Value: *
Replace All
 7
Author: Christian Müller,
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-07-19 14:14:07

Jeśli używasz Google chrome jako przeglądarki, możesz dodać rozszerzenie CORS i aktywować je, rozwiąże to problem z dziurą bez konieczności zmiany czegokolwiek w kodzie

 3
Author: Meriam,
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-12-17 15:48:43

Tutaj, musimy zrobić dwie rzeczy dla Apache Http

1) w httpd.plik konfiguracyjny, odkomentuj ten plik

LoadModule headers_module modules/mod_headers.so

2) Dodaj tę linię na dole.

Header set Access-Control-Allow-Origin "*"
 3
Author: Sireesh Yarlagadda,
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
2016-05-02 15:11:47

Niezwiązane z tym konkretnym pytaniem, ale dla każdego w tej sytuacji używającego jQuery...Ten błąd jest również spowodowany, jeśli próbujesz wysłać żądanie JSONP za pomocą jQuery i pominąć magiczny parametr callback: callback=?

 2
Author: danwellman,
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-09-25 20:16:23

Jeśli jesteś w tle Javy, jednym z możliwych rozwiązań może być utworzenie servletu, który wywoła Web-services dla Twojego javascript. coś takiego jak poniższy kod w metodzie GET (Your-choice)...

JsonElement jelement;
    JsonArray jarray;
    try {
        URL url = new URL("http://rest."YOUR URL"#ba0482");
        URLConnection connection = url.openConnection();
        connection.setDoInput(true);
        InputStream inStream = connection.getInputStream();
        BufferedReader input = new BufferedReader(new InputStreamReader(inStream));

        jelement = new JsonParser().parse(input);

        jarray = jelement.getAsJsonArray();

        response.setContentType("application/json");
        PrintWriter out = response.getWriter();
        out.print(jarray);
        out.flush();
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
}

Teraz w javascript wystarczy podać adres url jako nazwę servleta!!

 2
Author: Saty,
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-01-09 14:27:00

Podczas korzystania z ajax, aby uzyskać dostęp do strony php (javascript i plik php znajdują się na tym samym serwerze), pojawia się ten sam komunikat o błędzie.

Powodem było to, że podałem adres IP jako domenę w moim JavaScript. To sprawiło, że przeglądarka wierzyła, że wywołanie do pliku php znajduje się na innym serwerze.

Więc łatwe rozwiązanie, aby pozbyć się tego komunikatu o błędzie. a) sprawdź, czy pliki javascript i php znajdują się na tym samym serwerze b) upewnij się, że adres url (w szczególności domena) w Twoim JavaScript (np. http://www.smartana.co.uk/myJavaScript.js ) ajax odzwierciedla adres URL serwera (np. http://www.smartana.co.uk/myServer.php).

 0
Author: Wolfi,
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-05-30 11:42:17