IE 中的 HTTPS Ajax 请求问题(非跨域)

Posted

技术标签:

【中文标题】IE 中的 HTTPS Ajax 请求问题(非跨域)【英文标题】:Problems with HTTPS Ajax Request In IE (Not Crossdomain) 【发布时间】:2012-02-20 15:08:17 【问题描述】:

我对仅在 IE 中使用 HTTPS Ajax 调用时遇到的问题感到困惑。 IE 似乎认为我正在发出跨域请求,但我不是。以下代码从页面https://mydomain/customer_profile.php调用:

$.ajax(
    type: 'post',
    url: 'https://mydomain/ajax/retrieve_transaction_details.php',
    data: /* my data is here */,
    success: function(response)
        // do something with the response
    ,
    error: function (xhr, ajaxOptions, thrownError)
        alert(xhr.status);
        alert(thrownError);
    
);

这个请求在除 IE 之外的所有浏览器中都能正常工作。在 IE 中,错误函数返回“错误:访问被拒绝”。就像我说的那样,我对此完全感到困惑,所以任何见解或想法都会很棒。

【问题讨论】:

试试不带https://mydomain。因此,请尝试将 URL 设为“/ajax/retrieve_transaction_details.php”。 我试过这个。无论出于何种原因,如果我没有指定绝对路径,其他浏览器就会尝试通过 HTTP 发出请求,从而也破坏了它。 也许添加一个浏览器检查,如果他们使用 IE 来实现兼容性,并且如果他们使用任何其他浏览器,则将其转发到你已经工作的代码。 首先,确认您没有设置它以便您从http://www.mydomain 加载页面并且您的AJAX 引用只是http://mydomain 或反之亦然——这可能被视为X 域。接下来,试试://mydomain/ajax/retrieve_transaction_details.php 不带http/s 【参考方案1】:

我猜你在 htmlhead 部分中使用了 <base> 标记;对吧?

如果它指向 http 而不是 https,则会破坏 IE

【讨论】:

哇,原来如此。我完全忘记了我在标题模板中扔了那个标签。有趣的是它只在 IE 中破坏了它,但我想这对你来说是 IE。谢谢!【参考方案2】:

尝试在您的请求中将 crossDomain 设置为 true,如下所示:

$.ajax(
    type: 'post',
    url: 'https://mydomain/ajax/retrieve_transaction_details.php',
    data: /* my data is here */,
    crossDomain: true,
    success: function(response)
        // do something with the response
    ,
    error: function (xhr, ajaxOptions, thrownError)
        alert(xhr.status);
        alert(thrownError);
    
);

这应该允许您发出请求,无论它是否是跨域的。

【讨论】:

看看这个帖子:***.com/questions/5241088/…

以上是关于IE 中的 HTTPS Ajax 请求问题(非跨域)的主要内容,如果未能解决你的问题,请参考以下文章

ajax跨域问题简单解决--

从画布读取时出现 IE9 安全错误(非跨域)

jQuery 封装 ajax 的使用方法

Azure API管理:原始标头丢失或为空,并且该请求被分类为非跨域。未应用CORS政策

IE8可以从HTTP到HTTPS发布跨域请求吗?

跨域 Ajax 请求在 Opera 和 IE9 中不起作用?