私は 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
*
だけではうまくいかず、迷路に迷い込んでしまいました。