Запрос на перекрестный запрос заблокирован

У меня есть сайт на 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>