【问题标题】:IE throwing Error on regular ajax requestIE 在常规 ajax 请求上抛出错误
【发布时间】: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


【解决方案1】:

赞成票不多,观看次数不多。

我找到了问题和解决方案。

对于我的特殊情况,我使用会话来处理服务器端的信息,发生的事情是会话没有在 IE 中持续存在,导致我的一些其他代码将他的 ajax 请求重定向到另一个域(facebook.com ) 导致您在上面看到的跨域请求错误。

解决方案:

我发现 IE 不喜欢通过 ajax 传递会话,但你可以告诉它,效仿其他现代浏览器是个好主意,这就像添加 P3P 标头一样简单。

在发送请求之前将此添加到您的代码中,并且会话变量应在请求中发送。

  header('P3P:  CP="IDC  DSP  COR  ADM  DEVi  TAIi  PSA  PSD  IVAi  IVDi  CONi  HIS  OUR  IND  CNT"');

我最终重写了我的应用程序,没有太多依赖会话,但这绝对是一个很好的学习点,了解 IE 以及它如何通过 ajax 处理会话。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-17
    • 2016-05-27
    • 1970-01-01
    • 2018-02-21
    • 1970-01-01
    • 2013-04-17
    相关资源
    最近更新 更多