我正在AngularJS中进行跨域CORS POST请求,如下所示:
var url = 'https://api.myapp.tld';
var userObj = { username:'foo', password: 'bar' };
$http.post(url,userObj).success(function(data){
// do success stuff
}).error(function(data){
// do FAIL stuff
});
根据the standard Angular将通过OPTIONS
请求“预检”此问题。我的服务器返回带有必需访问控制头的204头,以允许客户端继续。到目前为止一切都很好。
然而,这发生在每个 POST
请求之前,除非它们非常快速地连续发生,在这种情况下我可以连续几次(所以似乎有某种超时可能)。我的应用程序是一个移动网络应用程序,所以我担心这些额外的选项请求可能会对3G(或Edge)网络的性能产生负面影响。
我的问题是:服务器对选项请求的响应是否可以向客户表明它可以存储更长时间的规则?
答案 0 :(得分:6)
Angular不需要此配置 - 您的服务器需要在OPTIONS
请求中添加适当的缓存标头。请参阅:https://developer.mozilla.org/en-US/docs/HTTP/Access_control_CORS#Access-Control-Max-Age
答案 1 :(得分:1)
如果您愿意稍微更改API以便将公共端点视为“简单请求”,您也可以完全避免预检请求。
我有一篇文章涵盖所有限制以及如何解决这些问题Two Strategies for Crossing Origins with Performance in Mind。