【发布时间】:2013-09-23 20:09:39
【问题描述】:
我有两个服务器系统...一个托管应用程序,另一个托管身份验证/授权。当应用程序检测到用户尚未登录时,它会重定向到身份验证服务器,并将用户最初请求的 URL 作为参数传递,以便在身份验证后将用户重定向回应用程序服务器到最初请求的确切网址。
但是,如果该原始 URL 包含 #,则整个例程都会被破坏。浏览器似乎正在解码 url 编码参数,因此,将 # 之后的任何内容都丢弃到地板上。我在 Chrome、Safari 和 Firefox 上都试过了。
例子:
原网址:
https://xxx.com/#/main/by-users?param1=53¶m2=13¶m3=39
重定向网址:
https://yyy.com/signin/?returnURL=https%3A%2F%2Fxxx.com%3A80%2F%23%2Fmain%2Fby-users%3Fparam1%3D53%26param2%3D13%26param3%3D39
浏览器显示:
https://yyy.com/signin/?returnURL=https%3A%2F%2Fxxx.com%2F#/main/by-users?param1=53¶m2=13¶m3=39
如您所见,包括 # 在内的所有内容都已解码。因此,服务器永远不会获得完整的“returnURL”参数值。它基本上只是得到
https://xxx.com/
这一定是某个地方的某些规范的一部分,尽管编码的 # 应该被解码和处理,就好像它从一开始就没有编码一样,这似乎很疯狂。但是如何解决这个问题呢?
谢谢。
【问题讨论】: