IE在常规ajax请求上抛出错误

问题描述 投票:4回答:1

我建立的Facebook页面标签有问题。

[该网站在Chrome和Firefox中运行正常,但是当我尝试在IE中做一些简单的事情时出现问题。

[[基本URL:http://domain.com/][REQ URL:http://domain.com/request]

[我想做的是再次从服务器BASE URL向服务器的REQ URL发出一个简单的ajax请求,在Chrome或Firefox中,我得到了预期的结果,但是IE,但是我得到了一些错误和警告。

警告如下(无敏感域信息)

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并调用complete方法,得到的文本状态类型为'error',我希望这是上述错误的结果。

我已阅读并理解以下文章:

Cross-origin resource sharingSame-origin policy

根据同源策略,我不应该绑定到CORS,并且我的get请求应该可以正常工作,或者我缺少什么。

感谢您的任何帮助。

[''UPDATE']

我已经确定上述错误仅在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个回答
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处理会话的很好的学习要点。

© www.soinside.com 2019 - 2024. All rights reserved.