当前位置:  开发笔记 > 编程语言 > 正文

单击浏览器上的"停止"按钮会发生什么?

如何解决《单击浏览器上的"停止"按钮会发生什么?》经验,为你挑选了2个好方法。

假设我单击网页上的按钮以发起提交请求.然后我突然意识到我提供的一些数据是错误的,如果它被提交,那么我将面临不必要的后果(类似于购物请求,我可能会被迫支付这个错误的请求).

因此,我疯狂地单击"停止"按钮,不仅仅是一次,而是多次(以防万一).

在这种情况下会发生什么?浏览器是否在不通知服务器的情况下取消请求?如果它确实通知了服务器,那么服务器是否会终止该进程,还是会对作为此请求的一部分完成的所有操作进行回滚?

我用Java编写代码.Java是否有任何特殊功能可用于检测STOP请求并回滚我们在此事务中执行的任何操作?



1> Filini..:

来自浏览器的网页加载通常是一个4步过程(不考虑重定向):

    当服务器可用时,浏览器发送HTTP请求

    服务器执行代码(用于动态页面)

    服务器发送HTTP响应(通常是HTML)

    浏览器呈现HTML,并要求其他文件(图像,CSS,...)

浏览器对"停止"的反应取决于您当时的请求步骤:

如果您的服务器运行缓慢或过载,并且您在步骤1中点击"停止",则没有任何反应.浏览器不发送请求.

但是,大多数情况下,"停止"将在步骤2,3和4中被点击,并且在这些步骤中您的代码已经执行,浏览器只是停止等待响应(2)或接收响应(3) ,或呈现响应(4).

HTTP调用本身始终是一个2步操作(请求/响应),并且没有自动方式从客户端回滚执行



2> Nick Sloan..:

由于这个问题可能引起不使用Java的人的注意,我想我会提到关于这个问题的PHP行为,因为它非常令人惊讶.

PHP在内部维护与客户端的连接状态.可能的值为NORMAL,ABORTED和TIMEOUT.连接状态为NORMAL时,生命周期良好,脚本将继续按预期执行.

如果用户在浏览器中单击"停止"按钮,则客户端通常会关闭连接,并且状态将更改为"已中止".将状态更改为ABORTED将立即结束正在运行的脚本的执行.另外,当状态更改为TIMEOUT时会发生同样的事情(超出允许的脚本运行时的PHP设置).

在某些情况下,此行为可能很有用,但在其他情况下可能会出现问题.似乎在适当的GET请求期间随时中止应该是安全的; 但是,在服务器上进行更改的请求中间中止可能导致仅部分完成的更改.

查看PHP手册关于连接处理的条目,了解如何避免此行为导致的并发症:

http://www.php.net/manual/en/features.connection-handling.php

推荐阅读
路人甲
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有