Chrome自动重新提交HTTP POST

时间:2017-08-18 13:31:48

标签: javascript angularjs google-chrome

我有一个角色1.x应用程序正在对api进行HTTP POST。如果api处理请求的时间超过3-5秒,则Chrome会在第一个请求完成之前提交第二个请求,导致api尝试两次处理相同的请求。

查看chrome dev工具,它只显示一个请求,但wireshark清楚地显示了对同一端点的2个HTTP POST请求。

到目前为止,我还无法找到有关此行为的文档。

是否还有其他人遇到此问题或发现有关如何控制它的任何信息?

编辑以添加代码示例

带有ng-click的HTML

<span><i class="fa fa-refresh" ng-click="reSubmit(transaction.transId)"></i></span>

角度控制器功能

$scope.reSubmit = function(transId) {
        RemediationService.reSubmit(transId).then(function(data) {
            init();
        });
    };

角度服务功能

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)
}

执行完所有上述代码后,我们会看到以下内容:

  1. 开发工具中的Chrome网络标签显示2个请求,HTTP OPTIONS请求成功使用HTTP 200,单个HTTP POST使用包含事务ID的预期有效负载
  2. 控制台日志&#34;测试&#34;两次
  3. Wireshark显示HTTP OPTIONS和2个HTTP POST请求。
  4. 10秒后,Chrome中的单个HTTP POST请求显示成功消息成功。
  5. 编辑2 - CORS处理

    这就是我们目前处理CORS和OPTIONS预检请求的原因:

    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
            }
        });
    

0 个答案:

没有答案