Заголовок «Access-Control-Allow-Origin» отсутствует в запрошенной ошибке ресурса

75

Я пытаюсь получить фид новостного сайта. Думал, что я бы использовал API-интерфейс Google для преобразования корма feedburner в json. Следующий URL-адрес вернет 10 сообщений из фида в формате json. http://ajax.googleapis.com/ajax/services/feed/load?v=1.0&num=10&q=http://feeds.feedburner.com/mathrubhumi

Я использовал следующий код, чтобы получить содержимое вышеуказанного URL

$.ajax({
            type:"GET",
            dataType:"jsonp",
            url:"http://ajax.googleapis.com/ajax/services/feed/load",
            data:{"v":"1.0", "num":"10", "q":"http://feeds.feedburner.com/mathrubhumi"},

            success: function(result){
                //.....
            }
        });

но он не работает, и я получаю следующую ошибку

XMLHttpRequest не может загрузить http://ajax.googleapis.com/ajax/services/feed/load?v=1.0&num=10&q=http%3A%2F%2Ffeeds.feedburner.com%2Fmathrubhumi. Нет заголовка "Access-Control-Allow-Origin" в запрошенном ресурс. Origin 'http://localhost', следовательно, не допускается.

Как это исправить?

  • 1
    Я протестировал ваш код здесь, с Chrome и работал как положено. Вы пытались использовать атрибут crossDomain: true?
  • 0
    Я разместил ваш код здесь: learnwithdaniel.com/test.html . посмотрим, сможете ли вы открыть без ошибок. Если вы не получили ошибку, проблема с вашим сервером
Показать ещё 3 комментария
Теги:
cors

7 ответов

76
Лучший ответ

Я полагаю, что это может случиться так, что Chrome не поддерживает localhost, чтобы пройти через Access-Control-Allow-Origin - см. проблему Chrome

Чтобы отправить сообщение Chrome Access-Control-Allow-Origin в заголовке, просто укажите свой локальный хост в файле /etc/hosts в какой-либо другой домен, например:

127.0.0.1   localhost yourdomain.com

Затем, если вы получите доступ к script с помощью yourdomain.com вместо localhost, вызов должен завершиться успешно.

  • 0
    Спасибо. Я столкнулся с этой проблемой и переключился на IE, что заставило меня увидеть основную ошибку в коде моего сервера, которая была скрыта из-за отказа Chrome от localhost.
  • 48
    Нету. Не работает вообще
Показать ещё 6 комментариев
101

Если вы используете браузер Google Chrome, вы можете взломать с расширением.

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

Вы можете использовать его для отладки вашего приложения на локальном компьютере (если все работает на производстве).

Примечание. Если URL-адрес становится неработающим, его расширение называется Access-Control-Allow-Origin: *. Я рекомендую вам отключить это расширение, когда вы не работаете над своими вещами, потому что, например, YouTube не работает с этим расширением.

  • 1
    Установка расширения Chrome у меня работает!
  • 1
    работает отлично. это сэкономило мое время.
Показать ещё 1 комментарий
9

Попробуйте это - установите Ajax-вызов, настроив заголовок следующим образом:

var uri = "http://localhost:50869/odata/mydatafeeds"
$.ajax({
    url: uri,
    beforeSend: function (request) {
        request.setRequestHeader("Authorization", "Negotiate");
    },
    async: true,
    success: function (data) {
        alert(JSON.stringify(data));
    },
    error: function (xhr, textStatus, errorMessage) {
        alert(errorMessage);
    }                
});

Затем запустите свой код, открыв Chrome с помощью следующей командной строки:

chrome.exe --user-data-dir="C:/Chrome dev session" --disable-web-security
1

Просто к вашему сведению, я заметил эту информацию из документации jQuery, которая, по моему мнению, относится к этой проблеме:

Из-за ограничений безопасности браузера большинство запросов "Ajax" подчиняются той же политике происхождения; запрос не может успешно получить данные из другого домена, субдомена, порта или протокола.

Изменение файла hosts, например @thanix, не сработало для меня, но расширение, упомянутое @dkruchok, решило проблему.

0

Вы также можете установить это расширение, если находитесь в Chrome.

Access-Control-Allow-Origin: *
-1

Chrome не позволяет интегрировать два разных локальных хоста, поэтому мы получаем эту ошибку. Вам просто нужно включить пакет Microsoft Visual Studio Web Api Core из nuget WebApiConfig.cs. И добавить две строки кода в проект WebApi в ваш файл WebApiConfig.cs.

var cors = new EnableCorsAttribute("*", "*", "*");
config.EnableCors(cors);

Тогда все сделано.

-3

Пожалуйста, используйте @CrossOrigin в контроллере загрузки backendside в Spring (уровне класса или уровне метода), поскольку решение для заголовка ошибки Chrome 'No 'Access-Control-Allow-Origin' присутствует на запрошенном ресурсе. '

Это решение работает для меня на 100%...

Пример: Уровень класса

@CrossOrigin
@Controller
public class UploadController {

----- ИЛИ -------

Пример: Уровень метода

@CrossOrigin(origins = "http://localhost:3000", maxAge = 3600)
@RequestMapping(value = "/loadAllCars")
    @ResponseBody
    public List<Car> loadAllCars() {


Ref: https://spring.io/blog/2015/06/08/cors-support-in-spring-framework
  • 0
    Хотя это, конечно, не отвечает на вопрос об ОП, у него есть веские основания. Использование Spring RESTful Services / Data через javascript требует от вас установки аннотации @CrossOrigin . Для всех, кто отрицает: Пожалуйста, укажите причину!
  • 0
    У меня не сработало! :(

Ещё вопросы

Сообщество Overcoder
Наверх
Меню