- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我想在用户进入站点之前用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/
我正在为我的按钮使用 onClick 功能。我的按钮代码如下所示: Button 1 Button 2 我的 JS 函数如下所示: function fadeNext(selectedId, spee
首先,我想提一下,我理解每个人在不提供至少一些试验或错误的情况下提出问题的感受,但这纯粹是一种知识需求,话虽如此,我会去提前问。 我一直无法弄清楚如何将保存在 MySQL 表中的 600-1000 个
我想做的事情有点令人困惑,而且我英语不太好,所以我先把代码贴在这里,这样你就可以很容易地理解: 以下是表单内容: Testing for Stackoverflow Option1
我学习 SDL 二维编程已有一段时间了,现在我想创建一个结合使用 SDL 和 OpenGL 的程序。我是这样设置的: SDL_Init(SDL_INIT_VIDEO); window = SDL_Cr
我创建了 2 个 data-* 标签。数据类别和数据标签。单击 href 标签后,我想复制该数据类别和数据标签以形成输入。我的代码是:
我想用 CSS 换行。我正在使用内容。 td:before { content: "Test\A Test2"; } 它不工作。如何正确
这个问题已经有答案了: Java Class that implements Map and keeps insertion order? (8 个回答) 已关闭 6 年前。 我有一个 HashMap
我正在尝试使用 JMeter 执行端到端测试。测试涉及写入SFTP文件夹并从另一个SFTP文件夹读取写入操作生成的文件。 我能够使用 JMeter SSH SFTP 插件连接到 SFTP 文件夹,并能
您好,我有带有标准服务器端 Servlet 的 GWT 客户端。 我可以从 GWT 客户端上传文件并在服务器端读取其内容 我可以将其作为字符串发送回客户端 但是 我有 GWT FormPanel与操作
我在 Plone 4.3.9 中创建了一个自定义类型的灵巧性,称为 PersonalPage,必须只允许在特定文件夹中使用 成员文件夹/用户文件夹 . 在他的 FTI 中,默认情况下 False .
在新(更新)版本的应用程序中更改小部件布局的最佳做法是什么?当新版本提供更新、更好的小部件时,如何处理现有小部件? 最佳答案 我认为您必须向用户显示一个弹出窗口,说明“此版本中的新功能”并要求他们重新
在我的应用程序中,我使用支持 View 寻呼机和 PagerTabStrip。进入查看寻呼机我有一些 fragment ,进入其中一个我正在使用支持卡片 View 。运行应用程序后,所有卡片 View
我有以下布局文件。基本上我有谷歌地图,在左上角我有一个 TextView,我需要在其中每 15 秒保持一次计数器以刷新 map 。布局很好。
我使用如下结构: HashMap > > OverallMap 如果我这样做: OverallMap . clear ( ) clear() 丢弃的所有内容(HashMap 对象、Integer 对
我在数据库中有 1000 张图像。在页面加载时,我随机显示 60 张图片,当用户滚动时,我通过 AJAX 请求添加 20 张图片。 第一种方法 我所做的是将所有图像加载到一个容器中,然后隐藏所有图像并
我正在使用 woocommerce 创建一个网上商店。 我想在每个产品上添加一个包含产品信息的表格,例如颜色、交货时间等等。 但是当我添加这张表时。本产品消失后的所有内容。 我的表的代码: td {
This question already has an answer here: What does an empty value for the CSS property content do?
因此,我正在与我的 friend 一起为 Google Chrome 开发一个扩展程序,对于大多数功能(即日历、设置等),我们打开一个模式,这样我们就不必重定向到另一个页面。当您在内容之外单击时,我们
我将可变高度的 CSS 框设置为在更大的 div 中向左浮动。现在我想添加一个标题,其中文本在框的左侧垂直显示(旋转 90 度),如下面的链接所示(抱歉还不能发布图片)。 http://imagesh
相关页面位于 www.codykrauskopf.com/circus 如果您查看我页面的右侧,在半透明容器和浏览器窗口边缘之间有一个间隙。我看了看,出于某种原因,wrap、main、content
我是一名优秀的程序员,十分优秀!