3

私は過去 5 か月間 gwt アプリの開発に費やしてきましたが、今はサード パーティの人々がそれを使い始める時です。これに備えて、そのうちの 1 人が私のアプリをリバース プロキシの背後にセットアップしましたが、これはすぐにブラウザーの同一オリジン ポリシーの問題を引き起こしました。応答ヘッダーに問題があると思いますが、問題を解決するためにそれらを書き直すことはできません。私はこれを試しました

response.setHeader("Server", request.getRemoteAddress());

私が望む振る舞いを模倣するある種の素朴な試みで。うまくいきませんでした(誰も驚かないことに)。

これについて何か知っている人なら誰でも、これを読むとニヤリと首を横に振るでしょうが、私は彼らを責めません。私だったら、私もニヤリと笑うでしょう... 私はこれについて何も知らないので、当然、この問題を解決するのは非常に困難です. どんな助けでも大歓迎です。

ヘッダーの書き換えを機能させて、対処している SOP の問題を回避するにはどうすればよいですか?

編集:私が得ている正確な問題は、次のようなポップアップです:

「SmartClient は URL ' https://localhost/app/resource?action= 'doStuffs'' に直接接続できません」は、ブラウザの同一オリジン ポリシーによるものです。この問題を回避するには、ホストとポート番号 (たとえ localhost の場合でも) を削除するか、XJSONDataSource プロトコル (クロスサイト呼び出しを可能にする) を使用するか、SmartClient サーバーに含まれるサーバー側の HttpProxy を使用してください。」

しかし、サーバーの上にプロキシがあるので、スマートクライアントの HttpProxy は必要ありません。これがシリアル化の問題である可能性があるという兆候は得られませんでしたが、おそらくこのメッセージは本当の問題を隠しています...

解決策 chris_l と saret の両方が解決策を見つけるのに役立ちましたが、マークできるのは 1 つだけなので、chris_l からの回答にマークを付けました。読者の皆さんは、ぜひ両方とも取り上げていただきたいと思います。解決策は非常に簡単で、サーバーへの絶対パスを削除し、相対パスのみを使用するだけでうまくいきました。みんなありがとう!

4

2 に答える 2

2

正確にはどのような問題がありますか?

以前に GWT アプリのリバース プロキシを作成する必要があったため、SOP の問題が発生したことを覚えていませんが、応答ヘッダーと uri がリバース プロキシの URL に書き換えられていることを確認する必要があります。これには ajax コールバック URL が含まれます。


リバースプロキシの背後で実行しているときに私が遭遇した (あなたも経験するかもしれない) 1 つの問題は、GWT サーバーのシリアライゼーション ポリシーに関するものでした。

これを修正するには、RemoteServiceServlet の実装を作成する必要がありました。これは 2009 年の初めから半ばのことでしたが、この問題はまだ存在しているようです。

他の人もこれに当たったようです-詳細についてはこれを参照してください(特にMichele Rendaによる回答)

于 2010-08-17T13:48:34.493 に答える
2

SOP (AJAX リクエスト用) は、HTML ページの URL と AJAX リクエストの URL の「発信元」が異なる場合に適用されます。オリジンには、ホスト、ポート、およびプロトコルが含まれます。

そのため、ページが の場合http://www.example.com/index.html、AJAX リクエストは の下の何かも指している必要がありますhttp://www.example.com。SOP の場合、リバース プロキシが存在するかどうかは問題ではありません。ただし、ブラウザに表示される URL (ポートとプロトコルを含む) が異なっていないことを確認してください。内部で使用する URL は無関係ですが、GWT アプリでその内部 URL を使用しないでください。

注: SmartClient の特殊なケースでの解決策は、(同じオリジンへの絶対 URL ではなく) 相対 URL を使用していることが判明しました。相対 URL はブラウザーの SOP 要件ではないため、これは SmartClient のバグだと思います。

于 2010-08-17T14:00:53.620 に答える