Почему я вижу здесь ошибку "происхождение не разрешено Access-Control-Allow-Origin"? [дубликат]



этот вопрос уже есть ответ здесь:




  • XMLHttpRequest не может загрузить XXX нет заголовка " Access-Control-Allow-Origin

    6 ответов



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



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


что может вызвать это, и как я могу это решить?

608   11  

11 ответов:

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

  • Ex 1: Ваш домен example.com и вы хотите сделать запрос, чтобы test.com => вы не можете.
  • Ex 2: Ваш домен example.com и вы хотите сделать запрос, чтобы inner.example.com => вы не можете.
  • Ex 3: Ваш домен example.com:80 и вы хотите сделать запрос к example. com:81 => вы не можете
  • EX 4: Ваш домен example.com а ты ... хотите сделать запрос к 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.

добавить глобальный.асакс в вашем решении.

добавить

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

на

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

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

<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

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

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

1) в httpd.конфигурационный файл, раскомментируйте этот файл

LoadModule headers_module modules/mod_headers.so

2) Добавьте эту строку внизу.

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

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

Если вы из фона java, одним из возможных решений может быть создание сервлета, который вызывает веб-службы для вашего javascript. что-то вроде приведенного ниже кода в методе 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();
    }
}

теперь в 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).

Comments

    Ничего не найдено.