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ć? 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!
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
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
.
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)
{
}
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>
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
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
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 "*"
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=?
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!!
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).
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