我有一个使用AJAX与服务器通信的Web应用程序。我正在使用https和SSL,并且keep-alive设置为10秒。
有时用户正在向保持活动时间到期时向服务器发送请求。发生这种情况时,会创建一个新的SSL会话。这一切都很好。 发生这种情况后,浏览器(Internet Explorer 11)将重新发送AJAX请求。
但现在发生了奇怪的事情。浏览器仅发送请求的标头。没有人。服务器首先等待一个永不到来的身体。最后,服务器正在中止请求,客户端获取http状态为0的异常,并显示消息:网络错误。
有人说这是使用SSL和keep-alive时的正常行为,并且必须在webb应用程序中处理。其他人说这是Internet Explorer 11中的不正确行为。
我只能看到服务器无法重用先前SSL会话上发送的请求的主体。浏览器需要重新发送整个请求,但这不会发生。
如果我在应用程序中捕获异常并将请求重新发送到服务器,则一切正常。但是抓住所有http = 0并重新发送它们感觉很奇怪。从应用程序的角度来看也可能是危险的。
该应用程序仅适用于IE,因此我无法与Chrome和FF进行比较。
我的问题是:这是正常的行为还是我在浏览器或webbserver上有一些不正确的配置?
答案 0 :(得分:0)
当服务器在发送保持连接的新请求的同时关闭连接时,则不清楚服务器是否收到请求并对其执行了操作。因此,只有被认为是幂等的请求(即不改变服务器上的任何内容)才应由客户端自动重试。当POST没有时,GET和HEAD被认为是幂等的。
因此,如果客户端自动重试GET或HEAD,这将是正确的行为。重试POST会很糟糕。重新提交没有最初拥有正文的正文的请求(就像你声称但未证明的那样)将是一个错误。