HTTP预检(OPTIONS)请求仅在IE中失败

时间:2017-08-21 08:22:30

标签: javascript angularjs http internet-explorer cors

我尝试向REST API发出POST请求。这是代码片段(使用AngularJS):

        $http({
            method: 'POST',
            url: url,
            data: reqBody,
            headers: {
                'content-type': 'application/json'
            }
        })
        .then(function (response) {...})
        .catch(function (error) {...});

根据this article,因为HTTP标头

  

'内容类型':' application / json'

浏览器得出结论,它必须制作一个不简单的"需要与服务器握手的HTTP请求(HTTP选项请求将在实际HTTP请求之前发送)。

Chrome会像魅力一样处理请求,但 IE(在我的情况下为11)会失败并显示以下消息

enter image description here

问题是,HTTP选项响应包含浏览器继续执行实际HTTP请求所需的所有内容。

2 个答案:

答案 0 :(得分:1)

您可以在IE设置中将网站添加到受信任区域,并将“跨域访问数据源”设置为“启用(不是提示)”:

enter image description here

它不仅适用于IE 9,也适用于10+。

更多相关信息:https://www.webdavsystem.com/ajax/programming/cross_origin_requests

答案 1 :(得分:0)

我找到了所有混乱的原因。

API服务和网站位于同一个域中,但位于不同的端口上。具体而言,API服务位于:

  

myDomain.com/apiService

该网站位于:

  

myDomain.com:44443/webSite

因此,当Web浏览器正在初始化来自:

的呼叫时

myDomain.com:44443/webSite/page1

为:

<强> myDomain.com/apiService/service1

由于CORS,Internet Explorer阻止了呼叫。出于某种原因,Chrome在这方面不那么严格,因为它成功地调用了API。

为了使它在Internet Explorer中运行,我将网站移动到与API相同的端口:

  

myDomain.com/apiService

     

myDomain.com/webSite