相关疑难解决方法(0)

如何在重定向时保存safari中的uri片段?

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

http://mydomain.com/#signup:anJlbmZyb0BldGhvc2VkZ2UuY29tfDEzNzQxOTIxNjU3NjQ=
Run Code Online (Sandbox Code Playgroud)

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

直到最近,当我添加SSL证书并通过向我的web.xml添加以下代码强制执行所有请求的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>
Run Code Online (Sandbox Code Playgroud)

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

更新8.1.13

经过深思熟虑的研究,我想我已经确定了根本原因,但我还没有找到一个好的解决方案.w3c备忘录中对问题的详尽描述 在重定向URL中处理片段标识符 (1999)

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

https://bugs.webkit.org/show_bug.cgi?id=24175
Run Code Online (Sandbox Code Playgroud)

w3c的共同用户代理问题描述了所需的行为:

http://www.w3.org/TR/cuap#uri
Run Code Online (Sandbox Code Playgroud)

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

safari gwt google-app-engine

12
推荐指数
1
解决办法
6687
查看次数

如何重定向到移动网站但保留哈希标记?

我希望拥有它,以便当用户加载我们的页面时,它会检查它们是否在移动设备上,然后它会将它们重定向到我们网站的移动版本,但保留原始的哈希标记.链接他们遵循.我尝试在javascript中使用哈希标记设置新位置,但它在Chrome中有效,但在Safari中不起作用.我读过这只是Safari所做的事情.这有什么工作吗?

safari mobile redirect location hashtag

6
推荐指数
1
解决办法
3494
查看次数

用于Safari的AWS(Cloudfront/S3)上的Angular

我在Safari上查看我的网站时遇到问题.我知道有很多信息要找,但我无法弄清楚究竟会有什么用.

我有一个角度ui-router的Angular应用程序,配置如下: $locationProvider.html5Mode(true).hashPrefix('!');

在我的index.html中

<meta name="fragment" content="!">
<base href="/" />
Run Code Online (Sandbox Code Playgroud)

我的S3配置是这样的:

<RoutingRules>
    <RoutingRule>
        <Condition>
            <HttpErrorCodeReturnedEquals>404</HttpErrorCodeReturnedEquals>
        </Condition>
        <Redirect>
            <HostName>test.example.com</HostName>
            <ReplaceKeyPrefixWith>#!/</ReplaceKeyPrefixWith>
        </Redirect>
    </RoutingRule>
</RoutingRules>
Run Code Online (Sandbox Code Playgroud)

现在,当我在Safari中使用F5页面时,一切#都会丢失.我真的没有机会在2016年解决这个问题吗?

safari amazon-s3 amazon-cloudfront angularjs angular-ui-router

4
推荐指数
1
解决办法
1265
查看次数