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

Gow*_*ham 14 http

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

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

假设没有,在完成长任务后,服务器将如何处理结果?还是寄回去?如果是,会发生什么?它会到达我的电脑吗?还是在路上迷路了?

这只是为了我的好奇心。

谢谢你的时间 :)

irc*_*ell 8

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

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