我尝试向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)会失败并显示以下消息:
问题是,HTTP选项响应包含浏览器继续执行实际HTTP请求所需的所有内容。
答案 0 :(得分:1)
您可以在IE设置中将网站添加到受信任区域,并将“跨域访问数据源”设置为“启用(不是提示)”:
它不仅适用于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