如何跳过OPTIONS飞行前请求?

我开发了一个PhoneGap应用程序,现在将其转换为移动网站。除了一处小故障,一切都可以顺利进行。我通过POST请求使用了某个第三方API,该API在该应用中可以正常运行,但在移动网站版本中却无法运行。

仔细查看后,似乎AngularJS(我想实际上是浏览器)正在首先发送OPTIONS请求。今天,我对CORS有了很多了解,但似乎无法弄清楚如何完全禁用它。我没有访问该API的权限(因此无法在那一侧进行更改),但是他们已将我正在处理的域添加到其Access-

Control-Allow-Origin标头中。

这是我正在谈论的代码:

        var request = {

language: 'fr',

barcodes: [

{

barcode: 'somebarcode',

description: 'Description goes here'

}

]

};

}

var config = {

headers: {

'Cache-Control': 'no-cache',

'Content-Type': 'application/json'

}

};

$http.post('http://somedomain.be/trackinginfo', request, config).success(function(data, status) {

callback(undefined, data);

}).error(function(data, status) {

var err = new Error('Error message');

err.status = status;

callback(err);

});

如何防止浏览器(或AngularJS)发送该OPTIONS请求,而直接跳到实际的POST请求?我正在使用AngularJS 1.2.0。

提前致谢。

回答:

预检是由您的Content-Type触发的application/json。防止这种情况的最简单方法是将Content-

Type设置为适合text/plain您的情况。application/x-www-form-urlencodedmultipart/form-

dataContent-Types也可以接受,但是您当然需要适当地格式化请求有效负载。

如果进行此更改后仍然看到预检,则Angular可能也在请求中添加了X-header。

或者您可能具有将触发它的标头(授权,缓存控制…),请参见:

  • https://developer.mozilla.org/zh-CN/docs/HTTP/Access_control_CORS#Preflighted_requests

以上是 如何跳过OPTIONS飞行前请求? 的全部内容, 来源链接: utcz.com/qa/415356.html

回到顶部