如果我发出 AJAX 请求,它将显示在 Chrome 的网络选项卡中。如果我在同一时刻进行基于客户端的重定向,AJAX 请求将被取消。但是请求会到达服务器并正常执行吗? HTTP/TCP 中是否有某些内容知道客户端已取消请求?我不这么认为,但我想确定一下。
最佳答案
如果您正在运行 PHP 服务器端,它将在客户端中止时停止处理。 (根据我的阅读,其他服务器端技术并非如此,它们会在客户端中止后继续处理。)请参阅:
http://php.net/manual/en/features.connection-handling.php
但是,最好不要以某种方式假设任何事情。浏览器可能取消请求。并且这种取消可能及时发生以停止服务器端的处理。但是,情况并非一定如此。客户端可以在请求期间的任何阶段取消——从请求实际发送之前到响应正文发送之后。另请记住,还有其他因素可能会中断服务器端请求处理(硬件、电源、操作系统故障等)。 预计会出现一些不可预测的情况。
据此,我提出两个建议:
编写代码时应尽可能保证事务安全。如果请求对数据进行了更改,请在所有更改都通过管道传送到数据库之前不要提交这些更改。如果您的应用程序依赖多个 AJAX 请求来更改某些数据,则在“最终”AJAX 请求结束之前不要提交任何更改。
即使请求完成,也不要假设客户端会收到响应。在我看来,这意味着如果您的应用程序大量使用 AJAX,请始终依赖客户端状态告诉服务器它有什么信息,而不是依赖服务器端状态来假设客户端“知道”某些信息。
关于javascript - 调用 AJAX 调用并让浏览器取消请求是否安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13687415/