Почему я вижу ошибку «Происхождение не допускается здесь по ошибке с контролем доступа? [дублировать

StackOverflow https://stackoverflow.com/questions/9310112

Вопрос

Этот вопрос уже имеет ответ здесь:

Я вижу следующую ошибку:

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

С этим кодом:

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);

Что может вызвать это, и как мне это решить?

Это было полезно?

Решение

JavaScript ограничен при выполнении запросов AJAX за пределами текущего домена.

  • EX 1: Ваш домен - пример. Их хотите сделать запрос на тест.com => Вы не можете.
  • Ex 2: Ваш домен - это пример. И вы хотите сделать запрос на inner.example.com => Вы не можете.
  • Ex 3: Ваш домен - пример.
  • Ex 4: Ваш домен - это пример. И вы хотите сделать запрос на example.com => Вы можете.

JavaScript ограничен «той же политикой происхождения» по соображениям безопасности, так что вредоносный скрипт не может связаться с удаленным сервером и отправлять конфиденциальные данные.

jsonp это другой способ использовать JavaScript. Вы делаете запрос, и результаты инкапсулируются в функцию обратного вызова, которая запускается в клиенте. Это то же самое, что связывать новую тег сценария с частью HTML (вы знаете, что вы можете загрузить сценарии из разных доменов, чем у вас здесь).
Однако для использования JSONP сервер должен быть настроен должным образом. Если это не так, вы не можете использовать JSONP, и вы должны полагаться на прокси -сервер на стороне сервера (PHP, ASP и т. Д.). Есть много руководств, связанных с этой темой, просто Google It!

Другие советы

Xmlhttprequest не позволит вам достичь localhost:8080 Из -за «той же политики происхождения».

Вы можете разрешить запросы из современных браузеров, добавив заголовок к вашему ответу на localhost:8080:

Access-Control-Allow-Origin: *

Вы можете сделать это, добавив директивы на ваш HTTP-сервер или добавив заголовки через код на стороне сервера (PHP, Ruby, ...).

Узнайте больше о перекрестных запросах Ajax на https://developer.mozilla.org/en/http_access_control

Если вы используете Chrome, простой обходной путь (только для целей разработки) - использовать опцию --disable-web-security.

Добавьте Global.asax в свое решение.

Добавлять

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

в

protected void Application_BeginRequest(object sender, EventArgs e)
{
}

Если вы используете Apache, это работает: поместите это в/создайте файл .htaccess в свой общедоступный корень и добавьте любые другие расширения файлов, которые вам могут понадобиться.

<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>

Для локальной разработки вы можете использовать инструмент для изменения заголовков ответов HTTP. Например Чарльз способен сделать это с помощью включенного инструмента переписать: Переписать инструмент

Просто добавьте новое правило для целевого домена/местоположения с:

Type: Add Header
Where: Response
Replace
     Name: Access-Control-Allow-Origin
     Value: *
Replace All

Здесь нам нужно сделать две вещи для Apache http

1) В файле httpd.config, расстроен этот файл

LoadModule headers_module modules/mod_headers.so

2) Добавьте эту линию внизу.

Header set Access-Control-Allow-Origin "*"

Если вы используете Google Chrome в качестве браузера, вы можете добавить расширение CORS и активировать его, он решит проблему отверстия, не изменяя что -либо в вашем коде.

Не связанный с этим конкретным вопросом, но для любого в этой ситуации, использующем jQuery ... Эта ошибка также вызвана, если вы попытаетесь сделать запрос JSONP, используя jQuery и опустите параметр Magic обратного вызова: callback=?

Если вы из фона Java, одно возможное решение может заключаться в том, чтобы сделать сервлет, который вызывает веб-услуги для вашего JavaScript. Что-то вроде кода ниже в методе Get (ваш выбор) ...

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();
    }
}

Теперь в JavaScript просто укажите URL как имя сервлета !!

Я сталкиваюсь с одним и тем же сообщением об ошибке, при использовании AJAX для доступа к странице PHP (JavaScript и PHP -файл находятся на том же сервере).

Причина заключалась в том, что я указал IP -адрес как домен в моем JavaScript. Это заставило браузер поверить, что звонок в файл PHP находится на другом сервере.

Таким образом, простое решение, чтобы избавиться от этого сообщения об ошибке. A) Убедитесь, что JavaScript и PHP -файл находятся на том же сервере B) Убедитесь, что URL (в частности, домен) в вашем JavaScript (например, http://www.smartana.co.uk/myjavascript.js) Ajax отражает URL вашего сервера (например, http://www.smartana.co.uk/myserver.php).

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top