当我们刷新网页时会发生什么?

26

我希望有人能够回答我一个关于网页刷新的基本问题。

我有一个dotnet webform,用户填写一些细节并单击提交。 网页的代码后台有大约20个函数需要执行。

现在假设当用户单击提交按钮时,网页正在执行第5个函数,同时用户刷新了他的浏览器;

已经正在处理的页面会发生什么? 页面是否会立即终止? 还是将其允许运行直到执行第20个函数? 或者正在运行的页面被销毁并创建并发送给客户端一个新页面?

感谢您的回答。

6个回答

23

当浏览器向服务器发出请求后,页面开始被处理。即使用户取消或停止请求,服务器仍将继续处理请求。如果用户重新加载/刷新页面,则会执行另一个请求,该请求将与第一个请求并行执行。

即使是在PHP的情况下,服务器也不会主动检查用户是否中断了连接。服务器只有在尝试返回请求结果时才知道已被中断。

因特网是一个断开连接的环境。服务器不知道浏览器的任何信息。服务器知道的唯一事情就是收到了请求,并且必须填充该请求。


3
当浏览器刷新页面时,浏览器会向服务器请求页面及其组件(CSS、JS等,如果没有缓存)的最新副本。
如果页面是通过POST方式提交的,则浏览器将再次提交数据。
页面加载完成后,服务器端的执行应该已经完成(除非您执行了其他进程或运行不再向客户端发送任何数据的后台代码)。
如果页面仍在加载中,则当前页面的连接将立即断开。这取决于服务器是否继续运行页面或终止页面。例如,在PHP中,我们可以使用ignore_user_abort()函数来保持脚本运行,即使页面在加载过程中被终止。
如果您的服务器是ASP,并且单击了ASP按钮,则按钮的操作(方法)将完全在服务器端完成,即使用户在半路刷新页面。这就是ASP.NET框架的工作原理。

2
一旦页面被发送到客户端浏览器,服务器在客户端希望做其他事情之前没有任何动作。 - jldupont
当然,服务器可以通过延迟发送数据流的结束来阻塞客户端...但这是另外一个故事了。 - jldupont
@jldupont - 当页面正在加载时(页面内容-而不是外部组件),服务器仍然与客户端保持连接。 - mauris
@Mauris:是的,当页面在加载时,服务器仍然与客户端保持连接...我并没有说过其他的话。 - jldupont
在这个问题中,用户在网页表单上点击了提交按钮。服务器端代码正在运行。用户在浏览器上点击刷新 - 服务器端代码(onBunttonClick())将通过此函数一直运行到结束。 - Dani

0
简单地说,除非在会话中,否则用户所看到的页面将丢失,他们无法再次恢复。但服务器不知道用户是否已断开连接,因此应用程序将继续运行,除非应用程序有会话/超时功能,即使有这个功能,如果会话没有完成,也很奇怪。
希望这可以帮助你。
RE

0

代码执行将继续到结尾。


嗯...能提供一下这个说法的参考资料吗? - jldupont
@Dani - 不对。至少对于PHP来说,我知道是这样的。 - mauris
1
对于asp.net而言,至少当我在服务器卡在一个长时间操作时意外地刷新页面时,我会看到它完成所有代码,然后才重新加载页面。 - Dani
伙计们 - 这与服务器端没有任何关系,除非客户端在完成页面之前向服务器发送XHR请求。即使这样,如果你点击重新加载,一个表现良好的浏览器重新加载。 - jldupont
1
想一想这意味着什么——如果不是这样的话——你正在网上购物,点击“提交”按钮——请求已经到达服务器,并且正在处理,当他们在银行中核对你的信用卡时,你却点击了刷新或回到主页......这笔交易会中止吗?(钱已经扣走了,而服务器正在“工作”生成你的收据......) - Dani
没有疑问 - 如果浏览器重新加载,它将重新加载,但是在服务器端运行的函数(从旧页面的提交)将一直运行到结束。 - Dani

0

我相信客户端的网页是在单线程中执行的。如果你的"onsubmit"调用了一系列的函数,这取决于你,但在某个时刻你可能会想要 提交() 表单。

换句话说,在你的特定情况下,所有的函数追踪将继续直到表单被发送。

另一方面,如果你按下"重新加载"按钮,执行就终止了。


0

所有函数都将被执行,即使您进行了刷新,您也可以进行测试。但在 .net 中,它提供了一个功能来检查客户端是否仍与服务器连接(对于您的第一次提交,这意味着服务器可以在任何时候检查客户端是否正在等待响应)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接