Javascript Chrome自动重新提交HTTP POST
我有一个angular 1.x应用程序正在向api发送HTTP POST。如果api处理请求的时间超过3-5秒,Chrome会在第一个请求完成之前提交第二个请求,导致api尝试处理同一请求两次 查看chrome开发工具,它只显示了一个请求,但wireshark清楚地显示了对同一端点的两个HTTP POST请求 到目前为止,我还无法找到有关这种行为的文档 有没有其他人遇到过这个问题,或者找到了关于如何控制它的任何信息 编辑以添加代码示例 带有ng click的HTMLJavascript Chrome自动重新提交HTTP POST,javascript,angularjs,google-chrome,Javascript,Angularjs,Google Chrome,我有一个angular 1.x应用程序正在向api发送HTTP POST。如果api处理请求的时间超过3-5秒,Chrome会在第一个请求完成之前提交第二个请求,导致api尝试处理同一请求两次 查看chrome开发工具,它只显示了一个请求,但wireshark清楚地显示了对同一端点的两个HTTP POST请求 到目前为止,我还无法找到有关这种行为的文档 有没有其他人遇到过这个问题,或者找到了关于如何控制它的任何信息 编辑以添加代码示例 带有ng click的HTML <span>&l
<span><i class="fa fa-refresh" ng-click="reSubmit(transaction.transId)"></i></span>
角服务函数
self.reSubmit = function(id) {
return $http.post(API + '/remediation/reSubmit/', {
transId: id
});
};
当前使用测试处理程序服务器端在节点中使用HapiJS,通过强制10秒延迟来导致问题
reSubmit = async function(request, reply) {
console.log('test');
setTimeout(function(){
reply({message:"success"})
}, 10000)
}
执行上述所有代码后,我们看到:
server.route({
method: 'OPTIONS',
path: '/{p*}',
config: {
handler: function(request, reply) {
var response = reply();
response.headers['Access-Control-Allow-Headers'] = 'Content-Type, Authorization';
response.headers['Access-Control-Allow-Methods'] = 'GET, POST, PUT, DELETE, OPTIONS';
return response;
},
cors: true
}
});
如果您看到它的跨域,第一个是CORS选项飞行前请求。iirc这些选项隐藏在Chrome中,但在Wireshark中是可见的。这些选项在Chrome和Wireshark中都是可见的,并且这些选项都被考虑在内。我看到了多个实际的POST请求,数据、内容类型、http方法都相应地设置了。选项请求被立即响应为http 200,然后http post发生,这需要5秒以上的时间,然后是另一个具有相同负载的http post。尝试增加超时?您控制API吗?如果您是这样做的,并且它位于不同的域中,则此问题表示由于飞行前检查请求,有两个帖子和一个选项。您需要结束来自API的飞行前检查请求以停止此问题。@我确实控制API,但如前所述,选项请求正在启动,并且正在工作。我收到1个选项请求和2个帖子请求。第二个POST在选项后接收,并且在第一个POST花费5秒左右的时间后接收。
server.route({
method: 'OPTIONS',
path: '/{p*}',
config: {
handler: function(request, reply) {
var response = reply();
response.headers['Access-Control-Allow-Headers'] = 'Content-Type, Authorization';
response.headers['Access-Control-Allow-Methods'] = 'GET, POST, PUT, DELETE, OPTIONS';
return response;
},
cors: true
}
});