我希望是否有人可以回答我关于刷新网页的基本问题。
我有一个 dotnet 网络表单,用户在其中填写一些详细信息并单击提交。网页背后的代码有大约 20 个功能需要执行。
现在假设,当用户点击提交按钮时,网页正在执行第五个功能,同时用户刷新了他的浏览器;
已经处理的页面会发生什么?页面会立即终止吗?还是允许它运行直到它执行第 20 个函数?或者运行的页面是否会被销毁并创建一个新页面并将其发送给客户端?
感谢您的回答。
一旦从浏览器向服务器发出请求,页面就会被处理。即使用户取消或停止请求,服务器也会继续处理请求。如果用户重新加载/刷新页面,这是另一个将与第一个请求并行执行的请求。
即使在 PHP 的情况下,服务器也不会主动检查用户是否中止了连接。服务器仅在尝试返回请求结果时才知道它已被中止。
互联网是一个断开连接的环境。服务器对浏览器一无所知。服务器唯一知道的是一个请求已经发出,它必须填写请求。
当在浏览器上刷新页面时,浏览器会在服务器上调用该页面及其组件(CSS、JS 等...如果未缓存)的新副本。
如果页面是 POST 调用,浏览器将再次 POST 数据。
页面已完成加载:
完全加载后,服务器端的执行应该完成(除非您执行额外的进程,或者运行不会再向客户端发送数据的后台代码)。
页面加载到一半:
当前页面的连接将立即断开 -如果页面仍在加载。页面是继续运行还是终止取决于服务器。例如,在 PHP 中,即使页面在加载中途终止,我们也可以使用 ignore_user_abort() 来保持脚本运行。
如果您的服务器是 ASP,并且您单击一个 ASP 按钮,即使用户在中途刷新,按钮的操作(方法)也将完全在服务器端完成。ASP.NET 框架就是这样完成的。
简单地说,用户看到的页面会丢失,除非在会话中,否则他们无法再次拾取它。但是服务器不知道用户已经断开连接,所以应用程序将继续运行,除非应用程序有会话/超时,即使这样,如果会话没有完成也会很奇怪。
希望这可以帮助。
关于
代码执行将持续到最后。
我相信一个网页(当然在客户端)是在一个线程中执行的。如果你的“onsubmit”调用了一系列函数,这取决于你,但在某些时候你会(也许)想要提交()表单。
换句话说(在您的特定情况下),所有功能跟踪将继续,直到发送表单。
另一方面,如果按下“重新加载”按钮,则执行终止。
所有的函数都会被执行,即使你有刷新,你也可以做一个测试。但是在.net中它提供了一个功能来检查客户端是否仍然与服务器连接(对于您的第一次提交,意味着服务器可以在您提交后随时检查客户端是否正在等待响应)