Socket.io + Node.js クロスオリジンリクエストがブロックされました 質問する

Socket.io + Node.js クロスオリジンリクエストがブロックされました 質問する

私は node と socket.io を使用してチャット アプリケーションを作成しています。Chrome では問題なく動作しますが、Mozilla では Cross-Origin Requests を有効にするとエラーが発生します。

クロスオリジンリクエストがブロックされました: 同一オリジンポリシーにより、リモートリソースの読み取りが禁止されています。http://waleedahmad.kd.io:3000/socket.io/?EIO=2&transport=polling&t=1401964309289-2&sid=1OyDavRDf4WErI-VAAAAIこの問題は、リソースを同じドメインに移動する、または CORS を有効にすると修正できます。

ノード サーバーを起動するためのコードは次のとおりです。

var express = require('express'),
    app = express(), 
    server = require('http').createServer(app),
    io = require('socket.io').listen(server),
    path = require('path');
server.listen(3000);

app.get('/', function(req, res) {
    res.sendfile(__dirname + '/public/index.html');
});

クライアント側です。

var socket = io.connect('//waleedahmad.kd.io:3000/');

HTML ページ上のスクリプト タグ。

<script type="text/javascript" src="//waleedahmad.kd.io:3000/socket.io/socket.io.js"></script>

また、アプリのルート ディレクトリで .htaccess ファイルも使用しています。(waleedahmad.kd.io/node)

Header add Access-Control-Allow-Origin "*"
Header add Access-Control-Allow-Headers "origin, x-requested-with, content-type"
Header add Access-Control-Allow-Methods "PUT, GET, POST, DELETE, OPTIONS"

ベストアンサー1

シンプルなサーバー側の修正

❗ 「socketio」パッケージは使用しないでください。代わりに「socket.io」を使用してください。「socketio」は古くなっています。一部のユーザーは間違ったパッケージを使用しているようです。

❗ セキュリティ警告: origin を設定する*と、フィッシングサイトがあなたのサイトの外観や雰囲気を模倣し、同じように機能させてユーザー情報を盗む可能性が出てきます。 origin を設定すると、フィッシングサイトの作業は容易になるどころか、困難になります。CSRFトークンこれも素晴らしいアイデアでしょう。

ソケット.io v3

ドキュメント:詳しくはこちら

cors オプション:https://www.npmjs.com/package/cors

const io = require('socket.io')(server, {
  cors: {
    origin: '*',
  }
});

socket.io < v3

const io = require('socket.io')(server, { origins: '*:*'});

または

io.set('origins', '*:*');

または

io.origins('*:*') // for latest version

*だけではうまくいかず、迷路に迷い込んでしまいました。

おすすめ記事