HTTP请求提前终止会发生什么?

假设,我在浏览器中输入了一个URL,浏览器提交了HTTP请求.远程HTTP服务器接受请求并启动长任务以提供请求.

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

假定没有,在完成长任务后,服务器会对结果做什么?它还是送回去了吗?如果是这样,会发生什么?它能到达我的电脑吗?还是在途中迷路了?

这只是为了我的好奇心.

谢谢你的时间 :)

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

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

翻译自:https://serverfault.com/questions/147886/what-happens-when-a-http-request-is-terminated-prematurely

转载注明原文:HTTP请求提前终止会发生什么?