如何在AngularJS中丢弃预检响应

Posted

技术标签:

【中文标题】如何在AngularJS中丢弃预检响应【英文标题】:How to discard preflight response in AngularJS 【发布时间】:2017-10-15 07:52:48 【问题描述】:

当向我的服务发送 http.post 请求时,我最初会发送一个 Option 请求(根据 Cors 的要求)。

但是我意识到我的 OPTIONS(飞行前)请求在其响应中没有返回 response.data,但我的 POST 请求是。这带来了一个问题,因为我需要从 POST 响应中访问 response.data...

Angular 是否允许我们以某种方式丢弃 http.post 调用中的 OPTIONS 响应?

$http.post("http://api.worksiteclouddev.com/RestfulAPI/api/vw_PeopleListSiteAccess_Update/Get/", JSON.stringify(vm.content))
    .then(function (response) 
        //success

        vm.person = 
            "firstname": response.data.Firstname,
            "surname": response.data.surname
        ; 
        console.log(response.data);
    ,
    function (error) 
        //failure
        console.log("Something went wrong..." + error.status);
    )
    .finally(function () 
        vm.ptsnumber = "";
    );

Chrome 响应:

【问题讨论】:

你检查过这个***.com/questions/22968406/… 你能澄清你的问题吗?您声明:“但我的 POST 请求是……我需要从 POST 响应中访问 response.data。” - 这没有意义。 问题和我描述的完全一样。我收到两个响应,一个用于 OPTIONS 请求,另一个用于 POST 请求。 OPTIONS 请求似乎在 POST 之前返回,即使我只是向服务发送 POST 请求。如何丢弃 OPTIONS 响应? @geostocker 你找到解决方案了吗? 【参考方案1】:

您不能放弃预检 OPTIONS 请求。

此请求的目的是向服务器请求权限以发出实际请求。您的预检响应需要确认这些标头才能使实际请求生效。

当您跨不同来源提出请求时,它们是必需的。

此飞行前请求是由某些浏览器发出的,作为一种安全措施,以确保正在完成的请求受到服务器的信任。这意味着服务器知道在请求中发送的方法、来源和标头是安全的。

在您的情况下,您应该在 post api response 中获得响应

$http.post(
 "http://api.worksiteclouddev.com/RestfulAPI/api/vw_PeopleListSiteAccess_Update/Get/", JSON.stringify(vm.content)
).then(function (response) 
  console.log(response.data);
  //You should get your response here
,
function (error) 
  console.log("Something went wrong..." + error.status);
);

//更多你可以创建外部服务并在该服务中调用api //在你的控制器中你可以调用那个方法

【讨论】:

应该得到它,但我没有。我没有收到 POST 响应,而是 OPTIONS 响应... 那么这不是因为OPTIONS,无论如何选项都会一直存在。 你在 POST 响应中得到了什么

以上是关于如何在AngularJS中丢弃预检响应的主要内容,如果未能解决你的问题,请参考以下文章

angularjs - 预检响应中的 Access-Control-Allow-Headers 不允许请求标头字段

AngularJs - 服务器抛出异常''XMLHttpRequest 无法加载预检的“URL”响应无效(重定向)'

AngularJS HTTP 标头配置。预检响应具有无效的 HTTP 状态代码 401

CORS 预检响应如何实际缓存在浏览器中?

如何在浏览器中实际缓存CORS预检响应?

angularjs 和 PHP:预检响应中的 Access-Control-Allow-Headers 不允许请求标头字段 Access-Control-Allow-Origin