1

私は自分のウェブサイトが socket.io とうまく連携するための解決策を考え出そうとしています。現在、Web サイト (主に php) を提供する apache があり、socket.io (ノード) を使用してライブ チャット サポート機能を実装しようとしています。チャット機能を個別に動作させることはできますが (express を使用して wundertutor.com:8000 にアクセスします)、ただ wundertutor.com にアクセスすると (チャット機能も含まれています)、CORS で問題が発生します (Cross -元のリソース共有)。これが私のエラーです(クライアント側):

XMLHttpRequest cannot load http://chat.wundertutor.com/socket.io/1/?t=1356421805823. Origin http://wundertutor.com is not allowed by Access-Control-Allow-Origin.

また

XMLHttpRequest cannot load http://chat.wundertutor.com/socket.io/1/?t=1356422229000. Cannot use wildcard in Access-Control-Allow-Origin when credentials flag is true.

このコード行をapp.jsに含めるかどうかに応じて

io.set("origins","http://wundertutor.com");

基本的にはノードアプリをメインサイトの補足にしたいだけなのですが、CORSのパラメータをどこで指定すればいいのか本当にわかりません。私は .htaccess ファイル、app.js、およびクライアント JavaScript でこれを実行しようとしましたが、どれも成功していません。

(また、私が奇妙だと思うもう 1 つの点は、wundertutor.com:8000 にアクセスすると、ノード アプリが正しく websocket を開きますが、wundertutor.com にアクセスしようとすると、XHR ポーリングを使用しようとすることです。この CORS 混乱)

どんな提案でも大歓迎です!

4

1 に答える 1

2

他の誰かが同じ問題を経験している場合、私は自分の問題を理解しました。私がやろうとしているのは CORS を使用することだとまだ思いますが、Apache または node.js 側で Access-Allow-Origin-Control の特定の設定を行う必要はありませんでした。問題を解決するために私がしたことは、Apacheサーバーではなくnode.jsサーバーからsocket.io javascriptファイルを提供することでした。これにより、socket.io javascript ファイルからのリクエストが、javascript ファイルがロードされた場所と同じオリジンを持つようになりました。次に例を示します。

<script src="http://wundertutor.com:8000/socket.io/socket.io.js"> </script> 
(node server - correct)

<script src="/javascripts/socket.io.js"></script>
(apache server - wrong)
于 2012-12-28T07:54:26.923 に答える