0

数日間、drupal と node.js の統合を試みています。しかし、socket.io.js には接続できませんでした。

Chrome コンソールからこのエラー メッセージが表示されます。

XMLHttpRequest はhttp://mydomainname.com:8080/socket.io/1/?t=1340201859161を読み込めません。オリジンhttp://mydomainname.comは Access-Control-Allow-Origin で許可されていません。

バックエンドの設定は次のとおりです。

/**
* This configuration file was built using the 'Node.js server configuration builder'.
* For a more fully commented example see the file nodejs.config.js.example in the root of this module
*/
backendSettings = {
  "scheme":"http",
  "host":"mydomainname",
  "port":8080,
  "key":"/path/to/key/file",
  "cert":"/path/to/cert/file",
  "resource":"/sites/all/modules/nodejs/node_modules/socket.io/lib",
  "publishUrl":"publish",
  "serviceKey":"",
  "backend":{
  "port":80,
  "host":"urb5.com",
  "messagePath":"realtime"},
  "clientsCanWriteToChannels":false,
  "clientsCanWriteToClients":false,
  "extensions":["nodejs.server.extension.js"],
  "debug":true,
  "transports":["websocket",
  "flashsocket",
  "htmlfile",
  "xhr-polling",
  "jsonp-polling"],
  "jsMinification":true,
  "jsEtag":true,
  "logLevel":1};

また、ソース コードには、次のようなスクリプト socket.io スクリプトがあります。

<script type="text/javascript" src="http://mydomainname.com:8080/sites/all/modules/nodejs/node_modules/socket.io/lib/socket.io.js"></script>

このスクリプトのビルド番号は 0.9.6 ですが、ftp でこのパスをたどると、socket.io.js がありますが、そのビルド番号は 0.9.5 です。

何か提案はありますか?, ありがとう..

4

1 に答える 1

0

ここでの問題は、サーバーから socket.io をロードしようとしているが、フロントエンド ファイルが別のドメイン スペース/サーバーにあることです。
サーバーによって有効にされていない場合、クロスドメインの ajax およびリソース要求を許可しないというセキュリティ規則があります。
したがって、socket.io.js の送信元であるサーバー側では、ページ ヘッダーに次のようなものを追加する必要があります。

Access-Control-Allow-Origin: http://hello-world.example
Access-Control-Max-Age: 3628800
Access-Control-Allow-Methods: PUT, DELETE

これにより、指定したドメインとリソース コンテンツを共有できます。また、ブラウザーは Access-Control-Allow-Origin エラーをスローしなくなりました。
また、ポート 8080 から js ファイルを含めようとしているのはなぜですか? これが socket.io リスナーをバインドするポートである場合、これは誤りであり、通常のポート (ほとんどの場合、定義せずに、または 80) から js ファイルを取得する必要があります。

于 2012-06-20T17:48:45.877 に答える