HTTP请求过早终止会发生什么?


13

假设我在浏览器中输入一个URL,然后浏览器提交了HTTP请求。远程HTTP服务器接受请求,并启动一个漫长的任务来服务该请求。

如果我在请求完成之前就将其终止(例如,按Esc或Firefox),如何关闭请求?浏览器会将此中止请求传达给服务器(我认为没有)吗?

假设没有,则在完成长任务后,服务器将如何处理结果?它会发回吗?如果是这样,会发生什么?一直到我的电脑都可以吗?还是迷路了?

这只是出于我的好奇心。

谢谢你的时间 :)


2
您是否尝试过运行wireshark捕获?它使查看一台计算机通过网络发送到另一台计算机的内容变得非常容易。
racyclist 2010年

Answers:


8

好吧,这完全取决于服务器的功能。通常,在尝试发送之前,它不会“检测”终止的请求。届时,脚本将从Web服务器获取一条user_abort消息(在php中,您可以通过告诉它忽略用户中止的操作ignore_user_abort(true);)。如果不尝试向客户端发送数据,服务器将无法得知请求已中止。

当它尝试将请求发送到关闭的TCP连接时,发生的情况完全取决于服务器软件。Apache的工作方式如下:如果正在处理动态脚本时,发送的数据仍处于静止状态,它将告诉脚本有关异常终止的信息,并让其处理所需的操作(默认情况下,PHP终止)。如果脚本完成,或者它是一个静态文件请求,它将忽略已关闭的连接并返回。


-2

我认为是电类的东西。收费。当某些连接终止时,正在发送的数据是一笔费用,由于没有用于该特定传输的监听套接字,因此它只是消失了。仅当有套接字时,才会发生一些通信。

例:

我们http://localhost为apache2 httpd 打了。假设它没有运行。浏览器打开一个套接字,向端口80(默认)发送一条消息,并查看是否有任何响应。由于没有监听程序,因为apache没有运行,所以此ping请求根本不会得到任何响应。至少200 ok或任何形式的握手。那我们的Ping会怎样?http发送一些信息:例如GET http://localhost 80...等。这行会发生什么?GET http://localhost 80?它只是充电而消失。

这只是我的信念,为了更加清晰起见,我们应该首先参考TCP。只有这样,我们才能了解Internet协议和随后的http的行为。最终,对于过早终止的http请求似乎没有具体定义。这就是为什么将其称为过早终止的原因。


1
虽然很诗意,但这并不精确,并且不是一种考虑此影响的特别有用的方法。
Falcon Momot 2013年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.