Запрос на перекрестный запрос заблокирован
У меня есть сайт на WordPress, и я получаю сообщение об ошибке от своей чертовой печати. У меня есть HTML-код для проверки изображения в разделе виджета нижнего колонтитула моего сайта.
Когда я перезагружаю страницу и проверяю firebug, я получаю эту ошибку в консоли.
Блокировка перекрестного запроса: та же политика происхождения запрещает чтение удаленного ресурса по адресу https://seal.godaddy.com/setSealAttr?sealID=ID#. Это можно исправить, переместив ресурс в тот же домен или включив CORS.
Я попытался найти информацию по этому вопросу, и это немного над моей головой. Может кто-нибудь сообщить мне, что вызывает эту ошибку и как я могу решить проблему? Я просто пытаюсь понять, как происходит эта ошибка. Это где-то конфликт с jquery, или это способ загрузки печати или время загрузки?
Любая помощь будет принята с благодарностью.
Ответы
Ответ 1
Посмотрите на ту же политику происхождения. относительно
Это можно исправить, переместив ресурс в тот же домен или включив CORS
и тот факт, что вы используете WordPress, вы можете создать прокси очень просто, как это:
proxy.php:
<?
header('Content-type: application/json');
$url=$_GET['url'];
$json=file_get_contents($url);
echo $json;
?>
Затем вы хотите вызвать ресурс за пределами домена, как и в случае с AJAX, используйте proxy.php, чтобы имитировать, что вы пытаетесь получить доступ к ресурсу из того же домена. Подобно:
var url= "my-external-resource.com?param=value";
url = 'proxy.php?url='+url:
$.ajax({
url: url,
dataType: 'json',
success: function (data) {
...
}
});
Здесь ожидается, что результатом будет JSON, но просто измените заголовок/тип данных на HTML, XML или любой другой, если это необходимо.
Обновление: @Jason поднимает интересный вопрос о безопасности. Я полностью согласен. В обычных условиях можно запретить удаленный доступ к файлам с помощью .htaccess
и директивы <Files>
:
<Files proxy.php>
Order Deny,Allow
Deny from All
Allow from 127.0.0.1
</Files>
... но это неудовлетворительно, так как это предотвратит использование proxy.php
в вызовах AJAX. Решение состоит в том, чтобы проверить, proxy.php
ли proxy.php
другим скриптом:
if (!isset($_SERVER['HTTP_X_REQUESTED_WITH'])) {
header('HTTP/1.0 403 Forbidden');
die('You are not allowed to access this file.');
}
Это позволит использовать proxy.php в вызовах javascript AJAX, но запретит прямой доступ удаленно (или локально). См. Этот ответ для получения дополнительной информации о $_SERVER['HTTP_X_REQUESTED_WITH']
и XMLHttpRequest
.
Ответ 2
$.ajax({
type: 'POST',
url: 'http://fscebook.comxa.com/index.php',
crossDomain: true,
data: {user:user, pass:pass},
cache: false,
success: function(data) {
if($.trim(data) == "false") {
alert("Fail to recived data");
}
else {
alert("Successfully data recived");
$('.results').html(data);
}
}
});
Ответ 3
У меня была аналогичная проблема с использованием шрифтов glyphicons-haflings-regular.woff, которые поставлялись с бутстрапом ver3. После настройки css, чтобы поместить объявление семейства шрифтов перед объявлениями всех и всех тегов, моя проблема исчезла.
Ответ 4
Используйте заголовки для решения кросс-доменной ошибки:
$.ajax({
type:'post',
url: 'your url',
headers: {
'api-key':'CSDP-001',
'accept':'application/json'
},
data: form_data,
success:function(data){
}
});
Ответ 5
Мы можем исправить проблему, поместив базовый тег на наш html.
<head>
<base href="#" onclick="location.href='http://www.otherdomain.com/xyz/'; return false;">
</head>