Chrome为ajax POST请求抛出多个请求(http pipelining)事件

时间:2012-06-14 05:14:18

标签: google-chrome xmlhttprequest http-post

所以当我们注意到我们网站上有重复订单的情况时,问题就开始了。当我们开始调查时,我们无法缩小可能导致页面上出现重复订单的内容,并解释重复数据的状态。最棘手的部分是那些订单是在SAME瞬间创建的(从最小毫秒到最小毫秒)。在服务器的访问日志中,也会在同一时刻收到请求。

因此,为了进一步调查我们称随机客户,他们中的大多数都接近相同的答案,他们使用慢速连接(其中一些通过调制解调器),他们使用铬。大多数反馈都是这样,页面卡住了,所以我按下了按钮。在一些搜索之后,我们了解了chrome中的Http流水线功能,这是一种在连接速度很慢的情况下获取页面的激进技术。

所以这是交易,用户按下提交按钮 - >验证ajax JSON调用(GET) - >表单数据通过ajax JSON调用发布 - >向客户返回一些反馈,客户采取行动,然后进行适当的重定向。

我不确定这是否是最佳使用AJAX甚至是GET / POST调用,但这是我所困扰的。

由于这个问题非常具体(慢速连接和chrome必须触发重复连接)并且事实被告知,我无法复制这个问题。然而,由于近95%的反馈指向Chrome,我不得不考虑http流水线。这是唯一可能解释请求的解释,因此可以在同一时刻创建多个记录。

我还了解到,http流水线仅针对GET请求而非POST请求。所以我不确定是否:

这涵盖了AJAX POST请求(我使用jQuery而且我确实使用了type:POST) Chrome可能以某种方式回来(错误地)为所有请求抛出多个请求(参见:What to do with chrome sending extra requests?

我在Chrome的情况下只能找到的参数是默认禁用http流水线。

我甚至不确定在这种情况下要进行哪些检查,因为这两个请求都是在同一时刻提供的。我可以在后端检查以检查是否创建了类似的记录,但这将是一个昂贵的检查,减慢订单,业务可能不欢迎它。

我在http://www.chromium.org/developers/design-documents/network-stack/http-pipelining找到了一些内容但不确定我是否必须强制/破解我的请求以满足阻止http流水线操作的标准之一。

任何要测试的点都将不胜感激。

0 个答案:

没有答案