Jquery 与IE11的CORS请求

Jquery 与IE11的CORS请求,jquery,cors,internet-explorer-11,Jquery,Cors,Internet Explorer 11,我有一个CORS(跨源资源共享)请求,来自我的登录页面到应用程序站点,位于不同的URL上。我有一个简单的页面I ping来确定用户是否已经登录,如果已经登录,则重定向他们。否则我会显示一个登录页面。我使用jQuery 这在safari、chrome、firefox中非常有效。。。当然不是。据MS称,IE 10及更高版本应支持 我正在使用jquery-2.0.3.min.js 你知道为什么这在IE11中不起作用吗 编辑:它看起来好像部分工作,因为它现在返回一个值{“id”:false}。每次都会发

我有一个CORS(跨源资源共享)请求,来自我的登录页面到应用程序站点,位于不同的URL上。我有一个简单的页面I ping来确定用户是否已经登录,如果已经登录,则重定向他们。否则我会显示一个登录页面。我使用jQuery

这在safari、chrome、firefox中非常有效。。。当然不是。据MS称,IE 10及更高版本应支持

我正在使用jquery-2.0.3.min.js

你知道为什么这在IE11中不起作用吗

编辑:它看起来好像部分工作,因为它现在返回一个值{“id”:false}。每次都会发生这种情况,这意味着服务器永远不会获得凭据。我也在发布我的is_logged_页面,我正在使用CodeIgniter框架

编辑:在IE的安全设置下启用“允许跨域数据源”后,我不再收到任何错误消息

我收到的确切错误是:

SEC7118:XMLHttpRequest用于所需的跨源资源共享(CORS)

提前感谢

发现问题

我有一个类似的问题(一般使用CORS,而不是专门使用GWT)。 事实证明,浏览器设置阻止了第三方的访问 cookies(IE10>互联网选项>隐私>高级>第三方) Cookies>接受)。为了解决这个问题,我选中了“自动覆盖” cookie处理、“接受”(第三方cookie)和“始终允许” 会话cookies。“

安德鲁在这里回答了这个问题:


编辑:(现在我知道要搜索什么了)如果有人遇到这个问题,这个问题也会有帮助

将“跨域访问数据源”的设置更改为“已启用”将关闭IE中的跨域检查,这是非常不安全的。相反,您需要确保目标第三方资源发送一条消息,表明它没有对用户的隐私做可怕的事情。

IE10要求服务器除了返回跨域请求的CORS标头外,还返回有效的P3P策略。下面是用于从服务器返回P3P头的示例php代码

$szOrigin=$\u服务器['HTTP\u ORIGIN'];
如果($szOrigin!=null)
{
标题(“访问控制允许原点:$szOrigin”);
标题(“访问控制允许凭据:true”);
标题(“P3P:CP=\“所有独立的数字信号处理器相关的行政控制当前CUSo IVAo IVDo PSA PSD TAI TELo我们的SAMo CNT COM INT NAV ONL PHY PRE PUR UNI\”);
}

经过大量挖掘,我发现我正在使用ajax ping的页面位于internet区域,而我的当前页面位于intranet区域

IE 11为internet站点启用了“受保护模式”,启用该模式后,cookies不会发送到我正在ping的站点,即使它们属于该域

将页面添加到受信任的站点或禁用“受保护模式”解决了问题


请注意,即使启用了“保护模式”,当两个站点都位于internet区域时,也不会发生此问题。

我们遇到的问题是,除了其他浏览器外,IE11发送
访问控制请求标头:接受请求,因此必须将“接受”添加到allowedHeaders cors配置中,因为它似乎不是默认spring cors配置的一部分。

我有类似的问题,发现axios或jquery都不能与Internet Explorer和飞行前/cors问题一起使用。只有旧的XMLhttpRequest有效。因为在纯XMLhttpRequest中,我们可以这样做:

if (xhttp.readyState == 4 && xhttp.status == 200)

axios和jquery似乎考虑了状态,而不是readyState——它们以某种方式解释了存在cors问题——在IE中,要达到readyState==4需要几秒钟。

如果您有“杂项->跨域访问数据源”在Internet->安全选项中设置为disabled?您正在成功重定向的事实让我怀疑您是否需要ajax来完成此操作。事实上,它已设置为disabled。我启用了它,但它仍然不起作用,但现在也没有错误。您的IE缓存中是否有此js的旧版本(在添加“withCredentials”设置之前)(IE喜欢缓存。喜欢它)?我只是在猜。IE也喜欢缓存来自ajax请求的数据。确保使用类似于:$.ajaxSetup({cache:false})的内容。它不再向您提供错误的事实表明ajax成功(或者至少服务器响应并且脚本具有继续的凭据)。服务器输出的响应是什么?编辑:可能是
位置。替换
东西?试着先用
窗口检查代码是否进入成功块。警报(数据)
我查看了P3P,但决定不使用它,因为它不是真正使用的。从Wikipedia>P3P由万维网联盟(W3C)开发,并于2002年4月16日正式推荐。此后不久,开发停止,P3P的实现非常少。Microsoft Internet Explorer是唯一支持P3P的主流浏览器。你说:“为什么我的代码在IE中不起作用?”我说:“因为IE需要P3P。”你说:“但是除了在IE中,P3P并没有真正被使用。”我说:“这是表达我立场的一种非常优雅的方式。”(:是的,如果这是一个更关键的功能,我将实施P3P策略。我会给你答案,因为你在技术上是正确的,这是最好的正确。我在响应标题中添加了P3P,但仍然无法执行。我只能更改“跨域访问数据源”允许它工作!在StackOverflow上提问的正确方法是单击页面右上角的蓝色“提问”按钮。您的问题是:“如何允许使用CORS跨源访问数据?”这可能已经被问过很多次了。是的,这也为我解决了一个类似的问题。在我的例子中,它发送
访问控制请求头:content type,accept
这个建议帮助我修复了一个IE11 CORS
public function is_logged_in()
{
    $allowed = array(
        'http://mysite.net',
        'http://www.mysite.net',
        'http://www.mysite.com',
    );

    $url = $_SERVER['HTTP_REFERER'];
    $url = substr($url, 0, strpos($url, '/', 8));
    if(isset($_SERVER['HTTP_ORIGIN']))
    {
        if(in_array($_SERVER['HTTP_ORIGIN'], $allowed))
        {
            $this->output->set_header('Access-Control-Allow-Origin: ' . $_SERVER['HTTP_ORIGIN']);
        }
    }
    else
    {
        if(in_array($url, $allowed))
        {
            $this->output->set_header('Access-Control-Allow-Origin: ' . $url);
        }
    }


    $this->output->set_header('Access-Control-Allow-Headers: X-Requested-With');
    $this->output->set_header('Access-Control-Allow-Credentials: true');
    $this->output->set_header("Access-Control-Expose-Headers: Access-Control-Allow-Origin");


    //TODO: Try to detect if this is an ajax request, and disallow it if not.

    $data = new stdClass();
    $this->load->library("ion_auth");
    if($this->ion_auth->logged_in())
    {
        $data->name = $this->ion_auth->user()->row()->first_name;
        $data->id = $this->ion_auth->get_user_id();
    } else {
        $data->id = false;
    }

    $this->output->set_output(json_encode($data));

}
if (xhttp.readyState == 4 && xhttp.status == 200)