好吧,看来我最初的问题犯了一个错误。因此,这里有一些更正。答案仍然适用,因为当协议更改为 HTTPS (SSL) 时,第二个重定向就会停止。
就我而言,重定向发生了多次,并且浏览器不遵循第二次重定向。遵循第一个重定向,但返回错误。
我一直读到包含重定向的 JavaScript AJAX 响应会自动遵循,但在我的情况下看起来并非如此。浏览器会自动遵循第一个重定向,并且返回第一个重定向,而不遵循标头中的第二个重定向。我的问题是我希望浏览器自动遵循所有重定向。
重定向是 phpCAS 库的一部分。我有一个用 PHP 编写的 API,每次在返回结果之前都会检查用户身份验证。
这是顺序。需要注意的主要事情是浏览器在执行 1 次重定向后返回第二个响应。我更希望当我进行 AJAX 调用时它能一路走下去并返回最后的响应localhost/example/api
.
本地主机/示例
- Calls
localhost/example/api
使用 jQuery.ajax()
响应 1:localhost/example/api
- 重定向至
https://localhost/accounts/cas/login?service=api.example.com&gateway=true
(使用 SSL)。
响应 2:(SSL) localhost/accounts/cas/login?service=api.example.com&gateway=true
- 当查询键“gateway”存在时,登录只需重定向回“service”键提供的 URL(无论是否有票证)(向服务发出用户是否已登录的信号)。
响应 3:localhost/api?ticket=TICKET
响应 4:localhost/api
- 这次,CAS 客户端查看 $_SESSION 以记住票证是什么,然后处理返回 JSONP 的 API 请求。
我使用 CAS 而不是 OpenID 或 OpenAuth(orization) 并没有什么特别的原因。 CAS 只是我能够在 WordPress 中使用的第一个身份验证模块。我愿意接受有关使用不同身份验证库、CMS、框架等的建议。尽管如此,我还是希望能够完成这个项目。因此,重新工具越少越好。
正如您后来在评论中添加的那样发现自己,ajax 请求受同源政策 https://developer.mozilla.org/en/Same_origin_policy_for_JavaScript.
是的,您可以使用 JSONP - 但是,如果您足够幸运,只能支持 IE8 及更高版本,CORS http://www.w3.org/TR/cors/#use-cases可能是一个更好的解决方案。
基本上,添加标题,例如
access-control-allow-origin: http://api.example.com
access-control-allow-credentials: true
对于您的服务器答案,您可以解决跨源策略。
另请参阅此jQuery 票证 http://bugs.jquery.com/ticket/8283使其能够与 jQuery 一起使用。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)