使用PHP 5.4运行apache服务器。
我有一个表单,它向服务器发布一个xhr请求,如果在当前xhr完成之前再次按下按钮,则会中止以前的请求。
因此,如果我坐在那里,以尽可能快的速度(在大约100-150毫秒内)单击按钮,看到所有被取消的XHR都堆积在我的网络选项卡中,然后让最后一个请求真正完成,我会检查服务器,看到所有取消的请求都真正"完成"了他们在服务器上的任务(连接到数据库并将一些数据放入表中)。
也可能是相关的:在"工作"(插入数据库)之后发生的唯一事情就是将状态字符串发送回客户端。
我读到过,你不应该依靠取消HTTP请求来实际取消服务器进程,但这里有点可疑。
取消XHR请求是否可靠,或者我的服务器是否发生了问题?
XMLHttpRequest中止仅用于防止阻塞UI,但不会取消服务器请求。
那么答案是什么呢?这对服务器来说是不可靠的。
如果您计划一次阻止多个请求,您可以使用1)服务器端排队或2)在请求过程中简单禁用操作按钮(仅在请求完成时重命名按钮)。我认为后者更简单。
HTTP是一个无状态协议。当您从客户端中止POST
时,它只是阻止客户端侦听响应,但POST
已经发送到服务器。当服务器收到请求时,它不会坐视不理,等待另一个请求;它简单地执行与对给定资源的CCD_ 3请求相关联的动作。