在浏览器中取消页面加载时,服务器中会发生什么?

时间:2008-10-29 04:10:28

标签: web-applications

在虚构的网络应用程序中......

  1. 用户点击链接
  2. 服务器开始准备响应,但需要几秒钟
  3. 用户取消页面加载
  4. 请求会怎样? 服务器是否继续准备响应? 响应是否到达浏览器?

4 个答案:

答案 0 :(得分:5)

服务器将继续准备响应。当它尝试将响应发送到客户端时,它将失败。当这实际发生时,可能取决于实际的应用程序服务器实现,响应是否被缓冲等。

在Java EE应用服务器(Tomcat和WebLogic,可能还有其他服务器)中,您将获得以下异常:

java.net.SocketException: Connection reset by peer: socket write error

答案 1 :(得分:1)

PHP了解三种连接状态:NORMAL,ABORTED和TIMEOUT。您可以使用ignore_user_abort()函数更改有关ABORTED连接的PHP策略(默认情况下,脚本已终止)。从备注部分:

“在尝试向客户端发送信息之前,PHP不会检测到用户已中止连接。”

请注意,如果缓冲了服务器的输出,则可能不会立即发送。

有关详细信息,请参阅PHP's page on connection handling

答案 2 :(得分:1)

如果在请求完全发送到服务器之前连接已断开,则不会进行响应处理。

如果请求已完全发送,则会触发服务器端处理,尽管连接断开,响应生成仍将继续。

在ASP.NET中,如果客户端不再连接,可以使用Response.IsClientConnected来暂停处理,从而节省CPU时间并立即将线程返回到线程池。

答案 3 :(得分:0)

我认为实际的TCP连接被浏览器关闭,因此Web服务器将无法发送数据,除非专门编程为在准备数据时检测断开的连接,否则页面将完全即使用户取消也会处理。

我对这些事情知之甚少,但那是我的猜测。