阻止跨源请求
我有一个wordpress网站,我从我的godaddy密封得到一个错误。 我在我的网站页脚的小部件部分中有validation图像的html。
当我重新加载页面并检查firebug时,我在控制台中收到此错误。
跨源请求已阻止:同源策略不允许在https://seal.godaddy.com/setSealAttr?sealID=ID#上读取远程资源。 这可以通过将资源移动到同一域或启用CORS来解决。
我试图查找有关这个问题的信息,这有点过头了。 任何人都可以告诉我这个错误是什么以及我如何解决这个问题? 我只是想了解这个错误是如何发生的。 这是某个地方与jquery的冲突问题,还是密封加载的方式或者加载时间?
任何帮助将不胜感激。
看看同源政策 。 关于
这可以通过将资源移动到同一域或启用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
和
指令阻止对文件的远程访问:
Order Deny,Allow Deny from All Allow from 127.0.0.1
…但这并不令人满意,因为它也会阻止在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
更多信息,请参阅此答案 。
$.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); } } });
我使用bootstrap ver3附带的glyphicons-haflings-regular.woff字体有类似的问题。 在调整css以在任何和所有标记声明之前放置font-family声明后,我的问题就消失了
使用标头解决跨域错误:
$.ajax({ type:'post', url: 'your url', headers: { 'api-key':'CSDP-001', 'accept':'application/json' }, data: form_data, success:function(data){ } });
我们可以通过在我们的html上放置基本标记来解决问题。