我有一个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。