我有一个WordPress网站,而我的哥达印章却出现错误。我的网站页脚的小部件部分中有用于验证图像的html。

当我重新加载页面并检查Firebug时,我在控制台中收到此错误。


  跨域请求被阻止:同源策略禁止阅读
  位于的远程资源
  https://seal.godaddy.com/setSealAttr?sealID=ID#。这可以解决
  通过将资源移至同一域或启用CORS。


我试图查找有关此问题的信息,这有点麻烦。任何人都可以填写引发此错误的内容以及如何解决该问题的方法吗?我只是想了解如何发生此错误。这是与某个地方的jquery发生冲突的问题,还是密封的加载方式或加载的时间?

任何帮助将不胜感激。

最佳答案

Same Origin Policy。关于


  可以通过将资源移到同一域来解决此问题,或者
  启用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>


...但这并不令人满意,因为这也会阻止在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.');
}


这将允许在javascript AJAX调用中使用proxy.php,但阻止从远程(或本地)直接访问。有关$_SERVER['HTTP_X_REQUESTED_WITH']XMLHttpRequest的更多信息,请参见this answer

10-05 20:50
查看更多