AngularJS -如何禁用OPTION请求?

zbq4xfa0  于 2022-10-31  发布在  Angular
关注(0)|答案(2)|浏览(151)

我注意到我的Angular也在每个POST请求之前创建OPTIONS请求。
我正在使用自定义API服务进行HTTP请求处理。

app.service('ApiService', function ($http) {

/**
 * Process remote POST request to give URL with given params
 * @param {String} url
 * @param {String} POST params
 * @return {JSON}  response from server
 */
this.doHttpRequest = function (type, url, params) {
    return $http({
        method: type,
        url: url,
        data: params,
        timeout: 5000,
        headers: {
            "Content-Type": "application/json",
        }
    });
}

});

问题是:

我如何禁用它(哪些配置值放在哪里)?
选项是好的东西吗?我想那是像“两个服务器之间的握手”这样的东西。

Angular 版本:1.2.15年

谢谢你的建议。

qlvxas9a

qlvxas9a1#

这不是Angular,而是XMLHttpRequest。
复杂的跨源HTTP请求需要一个pre-flight OPTIONS请求,这样浏览器就可以知道其他服务器是否会为 AJAX 请求授予权限。
如果不能确保所发出的 AJAX 请求是简单的,就无法阻止OPTIONS请求。
一个简单的请求:

  • 仅使用GET、HEAD或POST。如果使用POST将数据发送到服务器,则随HTTP POST请求发送到服务器的数据的内容类型为application/x-www-form-urlencoded、multipart/form-data或text/plain之一。
  • 不使用HTTP请求设置自定义标头(如X-Modified等)

除非您希望给予发送JSON,否则不能使用简单的请求。

0sgqnhkj

0sgqnhkj2#

我遇到了一个非常接近的情况,需要通过跨站点HTTP请求获取JSON,并通过使用jQuery请求而不是angularjs修复了这个问题

$.getJSON('http://www.host.com/test.json', '', function (data) {
    if (meta) {
        console.log("jq success :" + JSON.stringify(data));
    }
    console.log("jq success, but empty JSON");
})
    .done(function () {
        console.log("jq second success");
    })
    .fail(function (data) {
        console.log("jq fail " + JSON.stringify(data));
    })
    .always(function () {
        console.log("jq complete");
    });

我使用了Amazon S3 CDN,OPTIONS请求不能很好地与之配合,所以这救了我。S3服务器的回答是:

此分发未配置为允许用于此请求的HTTP请求方法。此分发仅支持可缓存的请求。

相关问题