gpt4 book ai didi

google-app-engine - 重定向后如何在 safari 中保留 uri 片段?

转载 作者:太空宇宙 更新时间:2023-11-03 15:19:04 25 4
gpt4 key购买 nike

我的 gwt/gae 应用程序使用事件和地点。为了创建异步流程(例如重置密码或验证电子邮件地址的所有权),我使用了一种模式,其中事件的状态可以被标记化并存储在数据存储中,然后检索并在以后恢复。为了检索状态 token ,我有一个地方将增强 token ID 作为参数,从数据存储中获取它,然后根据需要导航到适当的位置以恢复处理。这使我能够创建指向我的应用程序特定状态的链接,该链接可以通过电子邮件分发。例如:

http://mydomain.com/#signup:anJlbmZyb0BldGhvc2VkZ2UuY29tfDEzNzQxOTIxNjU3NjQ=

在这种情况下,上述链接将发送到注册期间使用的电子邮件地址,应用程序将恢复由哈希参数标识的注册事件。

一切都运行良好,直到最近我通过将以下代码添加到我的 web.xml 来添加 SSL 证书并为所有请求强制执行 https:

<security-constraint>
<web-resource-collection>
<url-pattern>/*</url-pattern>
</web-resource-collection>
<user-data-constraint>
<transport-guarantee>CONFIDENTIAL</transport-guarantee>
</user-data-constraint>
</security-constraint>

此约束通过(我相信)301 重定向到端口 443 来强制执行 https。在 Chrome、Firefox 和 IE 中就像一个魅力....但是 safari 似乎在重定向时删除了 url 片段......我认为你可以看看我的问题!如何防止 safari 丢弃 url 片段?!

更新 8.1.13

经过艰苦的研究,我想我已经找到了根本原因,但我还没有找到好的解决方案。 w3c 备忘录 Handling of fragment identifiers in redirected URLs 中提供了对该问题的详尽描述。 (1999)

基本上,http 规范对于 3xx 重定向期间 url 片段的处理并不清楚;并且 safari 在重定向时选择删除片段。请参阅以下 bugzilla 错误:

https://bugs.webkit.org/show_bug.cgi?id=24175

所需的行为由 w3c 的公共(public)用户代理问题描述:

http://www.w3.org/TR/cuap#uri

因此,鉴于所有这些,我认为这是一个 safari (webkit) 问题。我不明白的是为什么其他 webkit 浏览器不受影响?有已知的解决方法吗?

最佳答案

只需提供一个重定向页面 (200),该页面在加载时刷新 window.location 并注入(inject)哈希片段。

<!DOCTYPE html>
<meta charset="utf-8">
<html>
<body>
<script>
var hash = (location.href.split("#")[1] || null);
var pathField = "{{redirectUri}}";
if (hash) {
if (pathField.indexOf("#") == -1) {
pathField = pathField + "#" + hash;
}
}
window.location = pathField;
</script>
</body>
</html>

这样一来,它就适用于所有浏览器(至少是支持 javascript 的浏览器)。 {{redirectUri}} 是您要重定向到的 URL。如果它已经包含片段,则不会被覆盖。

关于google-app-engine - 重定向后如何在 safari 中保留 uri 片段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17982594/

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