Angularjs 获取 OPTIONS 和 POST 请求

Posted

技术标签:

【中文标题】Angularjs 获取 OPTIONS 和 POST 请求【英文标题】:Angularjs getting OPTIONS and POST request 【发布时间】:2017-01-11 18:24:05 【问题描述】:

我正在向不同的域发送一个 POST 请求,就像在 angular 中一样:

$http.post('http://domain.com/auth',  email: $scope.email, password: $scope.password )

在我的请求日志中,它只是发送一个 OPTION 请求。

所以我将此添加到我的domain.com/auth

header('Access-Control-Allow-Origin: *');
header("Access-Control-Allow-Headers: Origin, X-Requested-With, Content-Type, Accept");
header('Access-Control-Allow-Methods: GET, POST, PUT');

但是现在,我首先收到一个 OPTION 请求,然后是一个 POST 请求。所以因为我的 OPTION 请求是第一位的,所以我认为它仍然会影响我的结果。

有谁知道如何只获取 POST 请求而不获取 OPTIONS 请求?

【问题讨论】:

根据MDN:“浏览器“预检”请求,使用 HTTP OPTIONS 请求方法从服务器请求支持的方法,然后在服务器“批准”后发送实际请求使用实际的 HTTP 请求方法。服务器还可以通知客户端是否应随请求发送“凭据”(包括 Cookie 和 HTTP 身份验证数据)。 See this 和下面的答案。 【参考方案1】:

您可以通过触发 simple request 来阻止 POST 的预检

为此,请使用$httpParamSerializerJQLike 对数据进行编码(确保注入序列化程序)并将内容类型设置为application/x-www-form-urlencoded

$http(
  url: 'YOUR_ENDPOINT',
  method: 'POST',
  data: $httpParamSerializerJQLike(YOUR_DATA),
  headers: 
    'Content-Type': 'application/x-www-form-urlencoded'
  
)

【讨论】:

以上是关于Angularjs 获取 OPTIONS 和 POST 请求的主要内容,如果未能解决你的问题,请参考以下文章

AngularJS 对跨域资源执行 OPTIONS HTTP 请求 => 错误 401

angularjs: ng-select和ng-options

angularjs选择需要不工作的ng-options

编写自定义指令以将工具提示添加到AngularJS中的ng-options(TypeScript)

带有飞行前请求的 Angularjs $q.all 在 OPTIONS 请求后解析

使用 AngularJS 的 ng-options 进行选择