Server Sent Events (SSE) を提供するサーバーにブラウザーを接続しようとしています。このサーバーには、元のサーバーとは異なるドメインがあります。たとえば、http://d1.example.com/page
このページを呼び出すと、 の SSE チャネルに接続しようとしhttp://d2.example.com/subscribe
ます。これを実行しようとすると、次のエラーが表示されます。
Uncaught Error: SECURITY_ERR: DOM Exception 18
行で:
var source = new EventSource("http://d2.example.com/subscribe")
どうすれば修正できますか?
更新(私が試した解決策):
1-CORS
Web サービスのヘッダーに追加して、 CORSを試しました。ページからの呼び出しは現在正常に機能していますが、問題は解決しませんでした! SSE は通常の HTTP リクエストで動作すると思っていたのに、Chrome で動作しないのはなぜですか?Access-Control-Allow-Origin:*
d2.example.com
EventSource
$.get("http://d2.example.com")
d1.example.com
2-リダイレクト
私は httpd サーバーを使用しているので、d1.example.com
SSE リクエストを に渡す仮想ホストでリダイレクト ルールを作成しましたd2.example.com
。Firefox で問題なく動作しました。一方、Chrome はエラーを表示せず、SSE サーバーにも接続しませんでした。EventSource
コマンド全体をダンプしたようです。この解決策は決してうまくいかないように見えるので、先に進みましょう...
3- リバース プロキシ
d1.example.com/subscribe
基本的にd2.example.com
リバースプロキシ経由で接続している両方のブラウザが接続されています。ただしon_close
、ブラウザが閉じられていても、イベントはキャッチされません。d2 サーバーがプロキシ サーバーとのチャネルを作成しているため、これは理にかなっています。on_close
イベントをプロキシ サーバーから d2に転送するにはどうすればよいですか?
これを機能させる別の方法はありますか?