gpt4 book ai didi

html - 显示302重定向-或与HTTP兼容的等待屏幕的内容

转载 作者:可可西里 更新时间:2023-11-01 16:25:09 24 4
gpt4 key购买 nike

我想在用户进入站点之前用html绘制一个等待屏幕,因为有些长时间运行的身份验证进程超出了我的控制。我希望该屏幕完全符合http,即:
如果还没有可用的实际内容,它不应该用200 OK响应(这就消除了使用加载指示符显示空页面占位符并在后台使用ajax调用加载内容的选项)
如果真的有任何重定向(消除了html的元刷新功能),它应该用302 Redirect来响应。
我能看到的唯一“第三种方法”是依赖标准的302重定向。但是我需要请求的实际内容,它导致302个响应在等待第二个请求时呈现给用户(带有“please wait”信息或其他内容)。大部分(全部?)在这种情况下,浏览器不会绘制这些请求的内容,只是去等待来自重定向的数据。
问题是:
在什么情况下呈现302重定向请求的内容?可以在重定向之前强制浏览器呈现它吗?
有没有其他方法可以在不破坏http协议的情况下解决这个问题?或者没有任何内容的页面的200 OK状态最初是否未违反协议?

最佳答案

对你的问题的简短回答可能是“不可能的”。
但你可能很幸运。
显示302的内容-不可能
规范要求客户端立即转到302响应中指定的新url。没办法等了,现在有个反应的想法。
必须有人在等待-服务器端选项
您希望某个进程将一直等到冗长的身份验证过程完成。
这样的过程必须能够
1)启动认证过程
2)呈现一些“等待”页面
3)验证过程的检查结果
4)身份验证成功后,将您重定向到那里
步骤1-从服务器端启动身份验证过程可能是真正的问题,因为您将无法访问目标站点的cookies和其他身份验证资源。您正在为另一个域服务,因此您将没有机会阅读此安全相关的内容,只有您的浏览器知道。但我假设,你会设法(让你的用户早些告诉你这类信息)。
然后,您的web服务器将为您的客户机启动身份验证过程。这很奇怪,但是您可以尝试通过从服务器启动对目标站点的http请求来实现。这必须异步完成,因为我们还需要做一些其他事情,比如为用户提供一些要呈现的内容。
第2步-呈现一些“等待页面”。
若要在浏览器端呈现某些内容,可以返回包含200个状态代码的页面。我不认为,这是破坏http。您将返回一些不错的“等等”内容,并添加“刷新”标题,以在短时间内(如2秒左右)启动页面刷新。
第3步-检查身份验证过程的状态:您的服务器将从上一步的刷新表单中获得另一个请求。您的服务器必须知道此活动的上下文,可能是通过会话ID知道的。在此上下文中,它将发现有一个身份验证过程正在运行。如果身份验证尚未完成,请重复步骤2。
步骤4—(仍在服务器上)如果身份验证完成,则收集客户端作为身份验证用户连接到目标服务器所需的信息,并返回302,其中包含指向目标服务器的链接。这假设,链接允许以“身份验证”的方式连接。
这种方法可能在步骤1和/或4中失败。但可能会有这样的情况(取决于目标服务器)。
在客户端浏览器中运行的等待进程
等待完成身份验证的进程的另一个选项是在浏览器中。使用ajax进程并没有破坏http,它只是另一个并行运行的进程。
您可以呈现一些“等待”内容,然后尝试通过ajax连接到目标服务器。
但是,在这里您尝试执行某种跨站点脚本编写,因此除非目标服务器不允许您发出此类请求(搜索CORS,您的Web浏览器正在另一个域的上下文中运行),否则Web浏览器将拒绝此类请求。
假设您成功了,ajax进程将尝试连接,一旦成功,它将管理将页面重定向到目标页面。
代理服务器
您可以修改第一个建议的解决方案-“服务器端选项”,方法是接管与目标服务器的所有通信,并向客户端提供类似的内容。
结论
明确浏览器、服务器和目标服务器的角色
如果你用生命线“browser”,“myserver”,“targetserver”绘制Sequence diagram,那就太好了。
所有提议的解决方案都是危险的
最大的问题是,如果你想获得其他域的身份验证,而不是你所服务的域的身份验证,你就要求你的用户与你共享非常私人的信息。浏览器会尽最大努力阻止这种行为,你的用户可能会愿意与你的应用分享这些信息,但这种行为是非常棘手的。
试图解决一个你力所能及的问题是非常棘手的
对我来说,这听起来像是你在试图解决一个域上缓慢的身份验证过程,你无法控制。这常常导致非常绝望的情况,“我没有足够的力量去做,但我必须”。拒绝这样一个要求的好理由可能是“它需要打破一些与安全相关的标准”。

关于html - 显示302重定向-或与HTTP兼容的等待屏幕的内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22922835/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com