【发布时间】:2013-08-16 02:37:14
【问题描述】:
我创建的 Facebook 页面标签存在问题。
该网站在 Chrome 和 Firefox 中运行良好,但是当我尝试在 IE 中做一些简单的事情时遇到了问题。
[基本网址:http://domain.com/]
[请求网址:http://domain.com/request]
我想要做的是从我的服务器 BASE URL 再次在 REQ URL 上向我的服务器发出一个简单的 ajax 请求,在 Chrome 或 Firefox 中我得到了预期的结果,但是我得到了一些错误和警告。
警告如下(不含敏感域信息)
SEC7118: XMLHttpRequest for https://www.facebook.com/dialog/oauth?client_id=APP_ID&redirect_uri=URL_ENCODED_REDIRECT_URI required Cross Origin Resource Sharing (CORS).
SEC7119: XMLHttpRequest for https://www.facebook.com/dialog/oauth?client_id=APP_ID&redirect_uri=URL_ENCODED_REDIRECT_URI required CORS preflight.
错误如下
SEC7120: Origin http://domain.com not found in Access-Control-Allow-Origin header.
SCRIPT7002: XMLHttpRequest: Network Error 0x80070005, Access is denied.
我对这些错误进行了大量研究,我知道它们与跨域控制有关,并且从一个域发出的请求与另一个域不匹配。奇怪的是,虽然我的两个域是相同的,所以 CORS 不应该适用。我无法弄清楚我错过了什么。我已经阅读了至少 20 篇关于堆栈溢出的文章,但没有一篇能够准确解决我的问题。
REQ_URL 中的 /request/ 是一个从控制器调用的方法,我只需要调用这个方法就可以了,它没有什么特别之处,它是一个简单的 PHP 函数。
function request() {
return 'you win!';
}
ajax 使用 jQuery 发出请求,特别是 $.get 方法,这是我的代码:
$.get('/request', function(response){
console.log(response);
});
我没有得到任何回应。
我也尝试过使用 $.ajax 并调用完整的方法,我得到一个返回“错误”的文本状态类型,我希望这是上述错误的结果。
我已阅读并理解以下文章:
Cross-origin resource sharing Same-origin policy
根据同源政策,我不应该绑定到 CORS,我的 get 请求应该可以正常工作,或者我错过了什么。
感谢任何帮助。
['更新']
我已经确定上述错误仅在 facebook(Facebook 页面选项卡)内发生此“我认为”是 iframe 来自域“http://static.ak.facebook.com/”和我的域“http://domain.com”的结果这打破了同源策略规则。非常烦人,因为在进行 ajax 调用时,它们会从“http://static.ak.facebook.com/”发送到“http://domain.com”,因为我遇到了跨域策略错误。
我仍然不知道如何解决这个问题。
【问题讨论】:
-
所有的大写占位符都被填满了这些都是因为信息敏感而使用的。
标签: ajax facebook same-origin-policy