Вопрос

Я настроил совместное использование ресурсов Cross-Origin на сервере (Jetty с использованием CrossOriginFilter), и он отлично работает в IE8 и Firefox.В Chrome это просто...нет.

  $.ajax({ url : crossOriginURL,
    type : "GET",
    error : function(req, message) {
        alert(message);
    },
    dataType :  "json" } );

Вызывается функция ошибки с полезным сообщением «ошибка».Кажется, он делает запрос, но без каких-либо ожидаемых заголовков.Если URL-адрес имеет одно и то же происхождение, все работает нормально.

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

Решение 3

Что наконец-то работало для меня xhr.setRequestHeader('Content-Type', 'text/plain');

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

Я решил свою проблему таким образом:

Добавьте это в свой PHP код:

header("Access-Control-Allow-Origin: *");
header("Access-Control-Allow-Credentials: true ");
header("Access-Control-Allow-Methods: OPTIONS, GET, POST");
header("Access-Control-Allow-Headers: Content-Type, Depth, User-Agent, X-File-Size, X-Requested-With, If-Modified-Since, X-File-Name, Cache-Control");

Или добавьте эти заголовки в свой ответ.

Проблема: браузеры спрашивают на сервере для параметров перед основным запросом, чтобы проверить, имеет ли сайт возможность разрешить коммуникацию с разным происхождением, а затем, если да, они выполняют ваш пост или получить запрос.

РЕДАКТИРОВАТЬ: Попробуйте это (без вашего взлома), чтобы увидеть, если вы получаете данные ...

$.ajax({ url : crossOriginURL,
    type : "GET",
    error : function(req, message) {
        alert(message);
    },
    success : function(data) {
        alert(data);
    },
    dataType :  "text"} );

Похоже, что исходный постер, возможно, решил проблему, но для тех, у кого такая же проблема, как у комментатора Элизабет, я считаю, что проблема может заключаться в том, что Chrome отказывается устанавливать заголовок Origin для запроса CORS, если вы выполняете запрос из локальный файл.Он даже не позволит вам явно переопределить заголовок Origin.Это приводит к тому, что сервер видит «Происхождение:null", что в большинстве случаев приводит к ошибке 403.Firefox, очевидно, не имеет такого ограничения, как я обнаружил после долгих выдергиваний.

Если в этом случае вам абсолютно необходимо использовать Chrome, вы можете решить проблему, запустив веб-сервер локально и всегда обращаясь к файлу через http:вместо через файл:.

В моем случае это localhost: 8001 (интерфейс), который пытается вызвать API в Localhost: 7001 (на Server.js в качестве сервера узла). Даже у меня был плагин CORS установлен и включен в Chrome, по-прежнему политика CORS отклонила их как предварительные случаи.

Мне потребовалось более полугода, чтобы наконец решить проблему. Вот «глупые» шаги, верьте этому или нет:

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

II. Переверните его назад, перезагрузите приложение, если API успешны, остановитесь здесь, не нужно переходить к III.

III. Однако, если вы все еще получите отклонение CORS, затем удалите Chrome и установите актуальный Chrome.

IV. На новом Chrome ранее установленные плагин CORS все еще должны быть там, но с состоянием выключения.

v. Перезагрузить страницу, вы должны получить сообщения об отклонении CORS на консоли, которые верны.

VI. Обратитесь назад, перезагрузите страницу, ошибки должны исчезнуть.

Нет дополнительных идей, если вышеуказанные шаги до сих пор не работают в вашем случае.

Я также попробовал следующее на Server.js (узел) и до сих пор не работаю, поэтому не беспокоиться:

var app = express();
var cors = require('cors'); // Already done “npm i cors --save-dev”
app.options('*', cors());

Когда я обновил Chrome, с которым я сталкивался с проблемой, я решил его удлинитель Google «Access-Control-Tallements» новая версия. Если это старая версия, вам не нужно работать на новой версии Google Chrome

https://chrome.google.com/webstore/detail/access-control-allow-cred/hmcjjmkppmkpookkhgkeCjlaobjldi?hl=en.

Убедитесь, что вы не установили свой сервер как разрешены учетными данными, и установите этот заголовок «Разрешить заголовок» на *. Как ниже:

Access-Control-Allow-Origin: *
Access-Control-Allow-Credentials: true

Если ваш сервер возвращает эти значения для этих заголовков, то он не будет работать. Если вы установите Access-Control-Allow-Credentials к true, тогда вы не можете использовать *как ценность Access-Control-Allow-Origin заголовок Ниже приведен выдержка из Webdocs MDN для заголовка (https://developer.mozilla.org/en-us/docs/web/http/headers/access-Control-allow-origin.):

For requests without credentials, the literal value "*" can be specified, as a wildcard; 
the value tells browsers to allow requesting code from any origin to access the resource. 
Attempting to use the wildcard with credentials will result in an error.

Если вышеизложенное имеет место, просто установить Access-Control-Allow-Credentials к false.

Access-Control-Allow-Origin: *
Access-Control-Allow-Credentials: false

использованная литература

CORS будет работать в Chrome. Просто используйте Chrome - это безопасный режим, т. Е. Используйте отключение параметров безопасности. Google это об этом, или вы даже можете начать с командной строки.

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