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

假设我在浏览器中input一个URL,浏览器提交HTTP请求。 远程HTTP服务器接受请求并启动一个长时间的任务来处理请求。

如果我在请求完成之前终止请求(例如,按Esc或Firefox),请求如何closures? 浏览器将这个中止请求传递给服务器(我认为它不)?

假定没有,完成长期任务后,服务器将如何处理结果? 无论如何,它会发回吗? 如果是这样,会发生什么? 它到达我的个人电脑吗? 或在路上迷路了?

这只是为了我的好奇心

谢谢你的时间 :)

那么,这一切都取决于服务器在做什么。 通常,它将不会“检测”终止的请求,直到尝试发送。 此时,脚本将从Web服务器获取user_abort消息(在php中,可以通过ignore_user_abort(true);来告诉它忽略用户中止)。 在不尝试向客户端发送数据的情况下,服务器无法知道请求已被中止。

当它试图发送请求到closures的TCP连接时,发生的事情完全依赖于服务器软件。 Apache的工作原理是这样的:如果发送的数据在处理dynamic脚本时仍然存在,它会告诉脚本关于中止,并让它处理它想要的(PHP – 默认 – 终止)。 如果脚本完成,或者它是一个静态文件请求,它将忽略closures的连接并返回。

我认为这是被认为是电力类的东西。 收费。 当一些连接终止时,正在发送的数据是一个费用,它只是消失,因为没有监听套接字可用于特定的传输。 只有在有套接字的情况下才会发生一些通讯。

例:

我们打http://localhost为apache2 httpd。 假设它没有运行。 浏览器打开一个套接字,发送一个消息到端口80(默认),看看是否有任何回应。 由于没有侦听器,因为apache没有运行,所以这个ping请求根本没有得到任何响应。 至less200 OK或任何一种手动摇。 那么我们的ping会发生什么? http发送一些东西:如GET http://localhost 80 …等。这条线发生了什么? GET http://localhost 80 ? 这只是一个收费而消失。

这只是我的信念,我们应该首先提到TCP更清晰。 只有这样,我们才能了解Internet协议和后续的http的行为。 最终,对于提前终止的http请求,看起来没有具体的定义。 这就是为什么它被称为提前终止。