4

我有一个 web 应用程序,它通过 REST APi 进行身份验证,女巫用用户 ID 和会话令牌响应,这将作为 api 安全端点的授权基本标头与未来的 ajax 请求一起发送。这适用于所有浏览器,包括 iOS Safari。在iOS(iPad)上,当我使用apple-mobile-web-app-capable Meta标签并将该应用程序添加到主屏幕时出现问题:登录后,即使我的授权标头在那里(在网络检查器中查看我的 Mac 上的网络请求选项卡)发送第一个安全呼叫时,我收到 safari Authenticaion Required 弹出窗口,要求我输入密码。

标头是通过 ajaxSetupbeforeSend属性设置的:

xhr.setRequestHeader("Authorization", "Basic " + base64Value)

同样,在所有浏览器上一切都很好,IOS Safari App 和 Home Button 模式都可以,但是当使用 meta:apple-mobile-web-app-capable 时,authenticaion 机制被破坏了。

我确实搜索了很多,但还没有找到解决方案。

4

2 回答 2

0

我的问题现在解决了。Ajax POST 请求在 Safari IOS 6 上被缓存,即使我清理缓存和 cookie,之前缓存的请求也会卡在某个地方。我在另一个 ajax 调用中遇到了相关问题,但我们通过在 REST 拦截器中添加无缓存标头来解决它,但由于某种原因,对我们 API 的登录调用仍在使用缓存响应(旧会话令牌),但仅在 WEB能力模式。在 LOGIN url 的末尾添加时间戳可以解决该问题。

我仍然不明白为什么一个特定的请求永远不会从 WEB CAPABLE MODE 中的历史记录/cookies 中清除.....

于 2012-10-24T11:24:58.283 回答
0

我在 GET 请求中遇到了这个问题。我的解决方案是将cache: false标志添加到jQuery.ajax(),这会添加一个带有时间戳的额外 GET 参数以防止缓存。如果您不使用 jQuery,可以在您自己的代码中使用类似的技巧。

POST 请求永远不应该被缓存。这确实是iOS中的一个错误。

jQuery.ajax 文档:http ://api.jquery.com/jquery.ajax/

于 2014-06-27T19:09:32.267 回答