【问题标题】:How to prevent Mozilla Firefox to use multiple TCP connections?如何防止 Mozilla Firefox 使用多个 TCP 连接?
【发布时间】:2020-11-10 19:02:57
【问题描述】:

我有一个小型嵌入式网站,用户可以使用 摘要式身份验证通过输入表单和 ajax 请求向我的 HTTP 服务器发送一些数据。我的 HTTP 服务器限制为 1 个用于 HTTP 请求的 TCP 连接。如果请求完成,另一个页面会加载location.replace(newSite)

问题是,在第一个 ajax 请求之后,Firefox 想要创建一个到服务器的新 TCP 连接,这是不可能的,因此它失败了(我可以在 Wireshark 中看到它)。在 Chrome 中一切正常,因为它使用相同的 TCP 连接。
如果加载站点的 TCP 连接尚未关闭,则在第一个 ajax 请求时也会出现此问题。

有没有办法通过javascript告诉Firefox它应该在使用后立即关闭每个连接,或者(更好地)对任何正在进行的请求使用相同的TCP连接?

我已经为 ajax 请求尝试了"Connection":"close",但没有任何改变。此外,我无法处理直接输入到地址栏的location.replace 请求或 URL 请求。

谢谢你的帮助。

ajax 请求:

$.ajax({
 url: "/res",
 dataType: 'text', 
 cache: false,
 async: true,
 data: form_data,
 contentType: false,
 processData: false,
 timeout: 300,
 type: 'post',
 headers: { 'Connection':'close' },
 username: sUser,
 password: sPass,             
 })
 .done(function(data, textStatus, jqXHR){                   
    window.location.replace("/site.html");
                    
 })
.fail(function( jqXHR, textStatus, errorThrown ){
    alert("fail");              
 })

【问题讨论】:

    标签: javascript jquery ajax firefox tcp


    【解决方案1】:

    有没有办法通过 javascript 告诉 Firefox,它应该在使用后立即关闭每个连接,或者(更好地)对任何正在进行的请求使用相同的 TCP 连接?

    没有办法从服务器指示客户端不要使用多个并行连接,或者它应该在收到响应后立即关闭连接。

    但是可以在响应完成后在服务器端关闭连接,从而强制客户端为下一个请求打开一个新的 TCP 连接。

    【讨论】:

    • 我怕没有办法。不幸的是,我无法完全控制服务器如何做出反应。我有另一个有趣的行为,因为我使用参数“crossDomain:true”连续执行了 2 个 ajax 请求,它适用于这 2 个请求。尽管这没有任何意义,因为它是同一个域。有没有办法为客户端的所有请求全局启用 CORS?
    • @sk8_devil: “有没有办法为客户端的所有请求全局启用 CORS?” - 不同的问题,但仍然:不。你不能在这样的服务器端工作通过尝试以某种方式指示客户采取不同的行为来解决问题。我不确定您对服务器有什么控制权,但您可以尝试将“连接:关闭”添加到响应标头(而不是您尝试过的请求 - 您无法从 Javascript 内部设置此标头)。
    • 感谢您的澄清。不幸的是,我无法设置标头服务器端。我会找到不同的解决方案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-08-13
    • 1970-01-01
    • 2015-06-26
    • 2011-07-23
    • 2016-11-19
    • 2016-03-04
    相关资源
    最近更新 更多