http请求总是完成吗?

时间:2009-08-26 22:47:04

标签: javascript http

如果发出了http请求并且调用者放弃了请求,那么它是否会完成?例如,异步JavaScript GET请求记录数据库中的横幅单击然后重定向。脚本是否需要等待响应?

5 个答案:

答案 0 :(得分:3)

您的要求有多重要?如果数据库当时不可用怎么办?如果服务器端代码抛出异常怎么办?

对于非常关键的请求,您可能需要实现某种消息队列,该队列能够保存请求数据,直到可以完全处理它为止。如果您处理网格和云,则会变得更加复杂(您不能仅在单个节点上对消息进行排队,因为该节点可能会出现硬件故障)。但这是一个极端的情况,你最终会得到专用的队列服务器。

答案 1 :(得分:2)

客户端不会向服务器发送任何正在取消请求的通知。

PHP不知道客户端是否已断开连接,直到它尝试向客户端发送一些数据(例如,无缓冲的echo()调用),因此如果您的脚本没有向用户返回任何数据,它将完全执行。如果它确实返回数据,它可能会在中途中止,但可以使用ignore_user_abort()更改 如果您使用的是其他环境,则必须浏览文档。

答案 2 :(得分:2)

对于大多数情况,一旦服务器收到请求,如果客户端停止收听,它将不会停止处理。

但是,服务请求时服务器总是会失败,所以假设它已经完成可能不是一个好主意。

答案 3 :(得分:1)

你应该等它是安全的。你永远不知道服务器什么时候开始处理你的请求(虽然它通常在几百毫秒或更短的时间内),所以你不会知道是否有时间超时,失败,或者你是否会收到除非你等待,否则回应会超出预期。

答案 4 :(得分:1)

您无需等待响应以便请求到达服务器。服务器可以在处理请求时检查某人是否仍在侦听,但即使没有人正在侦听响应,处理请求也会启动(当然,除非路上有错误)。

如果您想确保请求确实已被处理,您应该等待响应,但请求不需要进入服务器。