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(TypeScript)