6

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.comEventSource$.get("http://d2.example.com")d1.example.com

2-リダイレクト

私は httpd サーバーを使用しているので、d1.example.comSSE リクエストを に渡す仮想ホストでリダイレクト ルールを作成しましたd2.example.com。Firefox で問題なく動作しました。一方、Chrome はエラーを表示せず、SSE サーバーにも接続しませんでした。EventSourceコマンド全体をダンプしたようです。この解決策は決してうまくいかないように見えるので、先に進みましょう...

3- リバース プロキシ

d1.example.com/subscribe基本的にd2.example.comリバースプロキシ経由で接続している両方のブラウザが接続されています。ただしon_close、ブラウザが閉じられていても、イベントはキャッチされません。d2 サーバーがプロキシ サーバーとのチャネルを作成しているため、これは理にかなっています。on_closeイベントをプロキシ サーバーから d2に転送するにはどうすればよいですか?

これを機能させる別の方法はありますか?

4

1 に答える 1

4

これはクロスオリジン リソース共有の問題である可能性が高く、関連するドメインで有効にする必要があります。

http://enable-cors.org/

MDNが言うように:

注: まだ標準には含まれていませんが、EventSource は Firefox 11 以降で CORS をサポートしています。これはまもなく標準になると予想されます。

于 2012-12-27T06:23:08.230 に答える