0

私は 2 つのサーバー システムを持っています... 1 つはアプリをホストし、もう 1 つは認証/承認をホストしています。アプリは、ユーザーがまだログインしていないことを検出すると、認証サーバーにリダイレクトし、パラメーターとして、ユーザーによって最初に要求された URL を渡します。これにより、認証後、ユーザーはアプリケーション サーバーにリダイレクトされます。最初に要求された正確な URL。

ただし、元の URL に # が含まれている場合は、ルーチン全体がホース処理されます。ブラウザが url エンコードされたパラメータをデコードしているように見えます。その結果、# の後に何かがドロップされます。Chrome、Safari、Firefoxでこれを試しました。

例:

元の URL:

https://xxx.com/#/main/by-users?param1=53&param2=13&param3=39

リダイレクト URL:

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&param2=13&param3=39

ご覧のとおり、# を含む以降はすべてデコードされています。したがって、サーバーは完全な「returnURL」パラメーター値を取得することはありません。それは基本的にただ得ます

https://xxx.com/

これはどこかの仕様の一部であるに違いありませんが、エンコードされた # をデコードして、最初からエンコードされていないかのように処理するのは正気ではないようです。しかし、どうすればこれを回避できますか?

ありがとう。

4

2 に答える 2

2

「#」文字を URI エスケープする必要があります。

于 2013-09-19T08:06:25.520 に答える