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

Posted

技术标签:

【中文标题】当我们刷新网页时会发生啥?【英文标题】:What happens when we refresh a web page?当我们刷新网页时会发生什么? 【发布时间】:2010-12-10 12:43:06 【问题描述】:

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

我有一个 dotnet 网络表单,用户在其中填写一些详细信息并单击提交。网页背后的代码有大约 20 个功能需要执行。

现在假设,当用户点击提交按钮时,网页正在执行第五个功能,同时用户刷新了他的浏览器;

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

感谢您的回答。

【问题讨论】:

【参考方案1】:

一旦从浏览器向服务器发出请求,页面就会被处理。即使用户取消或停止请求,服务器也会继续处理请求。如果用户重新加载/刷新页面,这是另一个请求,将与第一个请求并行执行。

即使在 php 的情况下,服务器也不会主动检查 user has aborted 是否连接。服务器仅在尝试返回请求结果时才知道它已被中止。

互联网是一个断开连接的环境。服务器对浏览器一无所知。服务器唯一知道的是一个请求已经发出,它必须满足这个请求。

【讨论】:

【参考方案2】:

当在浏览器上刷新页面时,浏览器会在服务器上调用该页面及其组件(CSS、JS 等...如果未缓存)的新副本。

如果页面是 POST 调用,浏览器将再次 POST 数据。

页面已完成加载:

完全加载后,服务器端的执行应该完成(除非您执行额外的进程,或运行不会再向客户端发送数据的后台代码)。

页面加载到一半:

当前页面的连接将立即断开 - 如果页面仍在加载。页面是继续运行还是终止取决于服务器。例如在 PHP 中,我们可以通过 ignore_user_abort() 来保持脚本运行,即使页面在加载中途终止。

如果你的服务器是 ASP,并且你点击了一个 ASP 按钮,即使用户中途刷新,按钮的动作(方法)也会完全在服务器端完成。 ASP.NET 框架就是这样完成的。

【讨论】:

一旦页面被发送到客户端浏览器,服务器与直到客户端希望做其他事情无关。 当然,服务器可以通过延迟发送数据流的结尾来阻止客户端......但那是另一回事了。 @jldupont - 在页面加载时(页面内容 - 不是外部组件),服务器仍然与客户端保持连接。 @Mauris: 是的,服务器仍然连接到客户端同时页面正在加载...我没有另外说。 在这个问题中 - 用户按下了 Web 表单上的提交按钮。服务器端代码正在运行。用户在浏览器上推送刷新 - 服务器端代码 (onBunttonClick()) 将运行此函数直到结束。【参考方案3】:

简单地说,用户看到的页面会丢失,除非在会话中,否则他们无法再次拾取它。但是服务器不知道用户已断开连接,因此应用程序将继续运行,除非应用程序出现会话/超时,即使会话未完成也会很奇怪。

希望这会有所帮助。

重新

【讨论】:

【参考方案4】:

代码会一直执行到最后。

【讨论】:

hmmm...愿意提供对此声明的引用吗? @Dani - 不正确。至少对于我知道的 PHP。 对于 asp.net 它确实如此,至少当我在服务器卡在长时间操作时不小心点击页面上的刷新时,我看到它完成了所有代码,然后才重新加载页面。 伙计们-这与服务器端无关除非客户端完成页面之前向服务器发送XHR请求。即使这样,如果您点击重新加载,一个性能良好的浏览器重新加载。 想想影响 - 如果不是这样 - 你在网上买东西,你点击提交 - 请求到达服务器并被处理,同时他们清除你的信用卡您点击刷新的银行 - 或主页......交易会中止吗? (钱已经花光了,服务器正在“工作”为您生成收据......)【参考方案5】:

我相信一个网页(当然是在客户端)是在一个单线程中执行的。如果您的“onsubmit”调用一系列函数,这取决于您,但在某些时候您会(可能)想要 submit() 表单。

换句话说(在您的特定情况下),所有功能跟踪将继续,直到发送表单。

另一方面,如果您按下“重新加载”按钮,则执行终止

【讨论】:

【参考方案6】:

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

【讨论】:

以上是关于当我们刷新网页时会发生啥?的主要内容,如果未能解决你的问题,请参考以下文章

当我们在 JavaScript 中将原语视为对象时会发生啥?

当我们设置 Xmx 和 Xms 大小相等时会发生啥

当我使用浏览器的开发工具查看页面上的某些元素时会发生啥?

当我们扩展 kubernetes 部署并更改其中一个 pod 或容器配置时会发生啥?

当 .NET 线程抛出异常时会发生啥?

当一个类符合一个包含变异函数的协议时会发生啥?