source

Socket.io + Node.js 교차 오리진 요청 차단됨

ittop 2023. 9. 9. 10:13
반응형

Socket.io + Node.js 교차 오리진 요청 차단됨

저는 노드와 socket.io 을 이용하여 채팅 어플리케이션을 작성하고 있습니다.Chrome에서는 잘 작동하지만 Mozilla에서 Cross-Origin Requests를 활성화하는 오류가 발생합니다.

오리진 간 요청 차단:동일 오리진 정책에서는 http://waleedahmad.kd.io:3000/socket.io/ ?EIO=2&transport=http&t=1401964309289-2&sid=1OyDavRDF4WERI-VAAI에서 원격 리소스를 읽을 수 없습니다.이는 리소스를 동일한 도메인으로 이동하거나 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"

간단한 서버측 수정

❗ "package" 패키지를 사용하지 마십시오.대신 "socket.io "을 사용합니다."madio"는 구식입니다.일부 사용자들이 잘못된 패키지를 사용하고 있는 것 같습니다.

: SECURITY WARNING : *는 피싱 사이트가 사용자 사이트의 모양과 느낌을 모방한 다음 사용자 정보를 파악하는 동안 동일하게 작동할 수 있는 기능을 제공합니다.출발지를 정하면, 그들의 일을 더 어렵게 만들 수 있고, 더 쉽게 만들 수는 없습니다.또한 CSRF 토큰을 사용하는 방법도 검토해 보는 것이 좋습니다.

socket.io v3

문서: https://socket.io/docs/v3/handling-cors/

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

*혼자서는 안 돼요 토끼굴을 무너뜨렸거든요

사용중입니다v2.1.0위의 어떤 대답도 저에게 통하지 않았습니다.그래도 다음과 같은 결과가 나왔습니다.

import express from "express";
import http from "http";

const app = express();
const server = http.createServer(app);

const sio = require("socket.io")(server, {
    handlePreflightRequest: (req, res) => {
        const headers = {
            "Access-Control-Allow-Headers": "Content-Type, Authorization",
            "Access-Control-Allow-Origin": req.headers.origin, //or the specific origin you want to give access to,
            "Access-Control-Allow-Credentials": true
        };
        res.writeHead(200, headers);
        res.end();
    }
});

sio.on("connection", () => {
    console.log("Connected!");
});

server.listen(3000);

설정을 시도할 수 있습니다.origins서버측 옵션을 사용하여 상호 요청을 허용할 수 있습니다.

io.set('origins', 'http://yourdomain.com:80');

여기서http://yourdomain.com:80요청을 허용할 원본입니다.

더 많은 정보를 읽을 수 있습니다.origins서식을 여기에

여기서 새로운 Socket.io (3.x)을 찾고 있는 모든 사람에게 마이그레이션 문서는 상당히 도움이 됩니다.

특히 이 토막글:

const io = require("socket.io")(httpServer, {
  cors: {
    origin: "https://example.com",
    methods: ["GET", "POST"],
    allowedHeaders: ["my-custom-header"],
    credentials: true
  }
});

io.set not a function아니면io.origins not a function, 다음과 같은 표기법을 사용해 볼 수 있습니다.

import express from 'express';
import { Server } from 'socket.io';
const app = express();
const server = app.listen(3000);
const io = new Server(server, { cors: { origin: '*' } });

위에서 시도해 보았지만 아무것도 효과가 없었습니다.다음 코드는 socket.io 문서에서 가져온 것으로 작동했습니다.

io.origins((origin, callback) => {
  if (origin !== 'https://foo.example.com') {
      return callback('origin not allowed', false);
  }
  callback(null, true);
});

클라이언트:

const socket = io('https://sms-server.cedrick1227.repl.co/', { });

서버:

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

저한테는 매력적인 것 같아요.

저는 단지 많은 것을 시도한 후에 CORS 문제를 해결한 것은 단순히 이전 버전의 socket.io (버전 2.2.0)을 사용하는 것이었습니다.내 소포.json 파일은 이제 다음과 같습니다.

{
  "name": "current-project",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "devStart": "nodemon server.js"
  },
  "author": "",
  "license": "ISC",
  "dependencies": {
    "socket.io": "^2.2.0"
  },
  "devDependencies": {
    "nodemon": "^1.19.0"
  }
}


npm install이것으로, 당신은 socket.io 을 사용하려고 할 때 CORS 문제가 사라진다는 것을 발견할지도 모릅니다.적어도 내겐 통했어요

제 경우에는 HTTP 서버와 socket.io 을 사용하고 있습니다.

오류:

var http = require('http').Server(app);
var io = require('socket.io')(http);

해결책:

var http = require('http').Server(app);
var io = require('socket.io')(http,  { cors: { origin: '*' } });

StakOverflow 및 기타 포럼에 대한 많은 서브제목을 읽은 후, 저를 위한 작업 솔루션을 찾았습니다.이 솔루션은 Express 없이 작업하기 위한 것입니다.

여기에 전제 조건이 있습니다.

  • 소켓이 연결될 서버와 동일한 서버에서 js 스크립트(src=)를 호출합니다(CDN 또는 로컬 호출 아님).
  • 서버 및 클라이언트 측에 동일한 버전의 socket.io 이 있는지 확인합니다.
  • 필요한 노드 모듈: fs, path, socket.io 및 winston 로깅
  • 설치 certbot을 암호화하고 도메인에 대한 인증서를 생성하거나 SSL 인증서를 구입합니다.
  • jQuery가 클라이언트 측의 socket.io .js 앞에 선언됨
  • UTF-8 인코딩

서버측

// DEPENDENCIES
var fs       = require('fs'),
    winston  = require('winston'),
    path     = require('path');


// LOGS
const logger = winston.createLogger({
    level     : 'info',
    format    : winston.format.json(),
    transports: [
        new winston.transports.Console({ level: 'debug' }),
        new winston.transports.File({ filename: 'err.log', level: 'err' }),
        new winston.transports.File({ filename: 'combined.log' })
    ]
});


// CONSTANTS
const Port          = 9000,
      certsPath     = '/etc/letsencrypt/live/my.domain.com/';


// STARTING HTTPS SERVER 
var server = require('https').createServer({
    key:                fs.readFileSync(certsPath + 'privkey.pem'), 
    cert:               fs.readFileSync(certsPath + 'cert.pem'), 
    ca:                 fs.readFileSync(certsPath + 'chain.pem'), 
    requestCert:        false, 
    rejectUnauthorized: false 
},
(req, res) => {

    var filePath = '.' + req.url;
    logger.info('FILE ASKED : ' + filePath);

    // Default page for visitor calling directly URL
    if (filePath == './')
        filePath = './index.html';

    var extname = path.extname(filePath);
    var contentType = 'text/html';

    switch (extname) {
        case '.js':
            contentType = 'text/javascript';
            break;
        case '.css':
            contentType = 'text/css';
            break;
        case '.json':
            contentType = 'application/json';
            break;
        case '.png':
            contentType = 'image/png';
            break;      
        case '.jpg':
            contentType = 'image/jpg';
            break;
        case '.wav':
            contentType = 'audio/wav';
            break;
    }

    var headers = {
        'Access-Control-Allow-Origin': '*',
        'Access-Control-Allow-Methods': 'OPTIONS, POST, GET',
        'Access-Control-Max-Age': 2592000, // 30 days
        'Content-Type': contentType
    };

    fs.readFile(filePath, function(err, content) {
        if (err) {
            if(err.code == 'ENOENT'){
                fs.readFile('./errpages/404.html', function(err, content) {
                    res.writeHead(404, headers);
                    res.end(content, 'utf-8');
                });
            }
            else {
                fs.readFile('./errpages/500.html', function(err, content) {
                    res.writeHead(500, headers);
                    res.end(content, 'utf-8');
                });
            }
        }
        else {
            res.writeHead(200, headers);
            res.end(content, 'utf-8');
        }
    });

    if (req.method === 'OPTIONS') {
        res.writeHead(204, headers);
        res.end();
    }

}).listen(port); 


//OPENING SOCKET
var io = require('socket.io')(server).on('connection', function(s) {

    logger.info("SERVER > Socket opened from client");

    //... your code here

});

클라이언트 측

<script src="https://my.domain.com:port/js/socket.io.js"></script>
<script>
    $(document).ready(function() {

        $.socket = io.connect('https://my.domain.com:port', {
            secure: true // for SSL
        });

        //... your code here

    });
</script>

문서에 "'with Credentials'를 오리진과 true로 설정할 수 없습니다: *, 특정 오리진을 사용해야 합니다:"라고 표시될 때까지 이 문제로 고심했습니다.그래서 내 코드는 이렇게 생겼고 희망은 유용합니다.

웹 클라이언트

const { io } = require("socket.io-client");
const socket = io("localhost:3000", {
  extraHeaders: {
    "my-custom-header": "abcd"
  }
});

서버

var express = require('express');
const app = express();
const http = require('http');
const httpServer = http.createServer(app);
const io = require("socket.io")(httpServer, {
  cors: {
    origin: '*',
    methods: ["GET", "POST"],
  }
});

이것은 Firefox의 인증 문제일 수 있으며 CORS에 반드시 문제가 있는 것은 아닙니다.Firefox CORS 요청 헤더에도 불구하고 '크로스 오리진 요청 차단됨' 표시

저는 Socketio와 Nodejs가 Firefox에서 CORS 오류를 던지는 것과 같은 정확한 문제에 부딪치고 있었습니다.*.myNodeSite.com 에 대한 인증서가 있었지만 Nodejs에 대한 LAN IP 주소 192.168.1.10을 참조하고 있었습니다(WAN IP 주소도 동일한 오류를 발생시킬 수 있습니다).인증이 IP 주소 참조와 일치하지 않았기 때문에 Firefox는 해당 오류를 던졌습니다.

네, 테스트를 위해 자체 서명된 인증서를 사용하여 이것을 작동시키는 데 몇 가지 문제가 있었기 때문에 저에게 효과가 있었던 설정을 복사할 것입니다.서명된 인증서를 사용하지 않는 경우 이러한 문제가 발생하지 않을 수 있습니다.

브라우저 Firefox 또는 Chrome에 따라 시작하려면 다른 문제가 있을 수 있으며 잠시 후에 설명하겠습니다.

먼저 설정:

고객

// May need to load the client script from a Absolute Path
<script src="https://www.YOURDOMAIN.com/node/node_modules/socket.io-client/dist/socket.io.js"></script>
<script>
var options = {
          rememberUpgrade:true,
          transports: ['websocket'],
          secure:true, 
          rejectUnauthorized: false
              }
var socket = io.connect('https://www.YOURDOMAIN.com:PORT', options);

// Rest of your code here
</script>

서버

var fs = require('fs');

var options = {
  key: fs.readFileSync('/path/to/your/file.pem'),
  cert: fs.readFileSync('/path/to/your/file.crt'),

};
var origins = 'https://www.YOURDOMAIN.com:*';
var app = require('https').createServer(options,function(req,res){

    // Set CORS headers
    res.setHeader('Access-Control-Allow-Origin', 'https://www.YOURDOMAIN.com:*');
    res.setHeader('Access-Control-Request-Method', '*');
    res.setHeader('Access-Control-Allow-Methods', 'OPTIONS, GET');
    res.setHeader('Access-Control-Allow-Headers', '*');
    if ( req.method === 'OPTIONS' || req.method === 'GET' ) {
        res.writeHead(200);
        res.end();
        return;
            }

});

var io = require('socket.io')(app);

app.listen(PORT);

개발을 위해 클라이언트 측에서 사용하는 옵션은 프로덕션에서 정상적으로 사용할 수 있습니다.

 rejectUnauthorized: false

"참"으로 설정하고 싶을 가능성이 높습니다.

다음으로, 자체 서명된 인증서인 경우 서버를 별도의 페이지/탭으로 방문하여 인증서를 수락하거나 브라우저로 가져와야 합니다.

파이어폭스의 경우 계속 오류가 발생했습니다.

MOZILLA_PKIX_ERROR_SELF_SIGNED_CERT

저에게 해결책은 다음 옵션을 추가하고 다른 페이지/탭에서 인증서를 수락하는 것이었습니다.

{ 
rejectUnauthorized: false
} 

Chrome에서는 다른 페이지를 열고 인증서를 수락해야 했지만, 그 이후에는 옵션을 추가할 필요 없이 모든 것이 정상적으로 작동했습니다.

도움이 되길 바랍니다.

참조:

https://github.com/theturtle32/WebSocket-Node/issues/259

https://github.com/socketio/engine.io-client#methods

socket.io 과 node.js & React를 이용하여 채팅 앱을 만드는 중 문제가 생겼습니다.또한 이 문제는 Firefox 브라우저에 공간적인 문제가 아닙니다. Edge & Chrome에서도 동일한 문제에 직면해 있습니다.

"Cross-Origin 요청이 차단되어 일부 다른 리소스에서 사용되고 있습니다.."

그러면 프로젝트 디렉토리에 cors를 다운로드하여 아래와 같이 server file index.js에 입력합니다.node.js를 사용하여 명령을 간단히 다운로드하려면:

npm 설치 코르스

const cors = require('cors');
app.use(cors());

이를 통해 CORS를 파일의 다른 리소스에서 사용할 수 있으며 브라우저에서 교차 오리진 요청을 허용할 수 있습니다.

ㅇ을 사용하시는 socket.io= = v4.4.0

저는 지역 개발에만 CORS 옵션이 필요했기 때문에 여기서는 아무것도 효과가 없었습니다.

제가 구현한 백엔드 솔루션은 다음과 같습니다.

    const io = require("socket.io")(server, {
        path: '/api/socket.io',
    });

    if (process.env.NODE_ENV === 'development') {
        io.engine.on('initial_headers', (headers, req) => {
            headers['Access-Control-Allow-Origin'] = 'http://localhost:3000';
            headers['Access-Control-Allow-Credentials'] = true;
        });

        io.engine.on('headers', (headers, req) => {
            headers['Access-Control-Allow-Origin'] = 'http://localhost:3000';
            headers['Access-Control-Allow-Credentials'] = true;
        });
    }

서버측에서 다음을 사용합니다.

const express = require("express");
const cors = require("cors");
const http = require("http");
 
const app = express();
app.use(express.json());
app.use(cors());
 
const server = http.createServer(app);
const socket = require("socket.io")(server, {
  cors: {
    origin: "*",
    methods: ["GET", "POST"],
  },
});
 
socket.on("connection", (socket) => {
  console.log("socket connection : ", socket.id);
});
 
server.listen(3001, () => {
  console.log("server has started!");
});

이 내용을 살펴봅니다: 전체 보기

서버:

let exp = require('express');
let app = exp();

//UPDATE: this is seems to be deprecated
//let io = require('socket.io').listen(app.listen(9009));
//New Syntax:
const io = require('socket.io')(app.listen(9009));

app.all('/', function (request, response, next) {
    response.header("Access-Control-Allow-Origin", "*");
    response.header("Access-Control-Allow-Headers", "X-Requested-With");
    next();
});

클라이언트:

<!--LOAD THIS SCRIPT FROM SOMEWHERE-->
<script src="http://127.0.0.1:9009/socket.io/socket.io.js"></script>
<script>
    var socket = io("127.0.0.1:9009/", {
        "force new connection": true,
        "reconnectionAttempts": "Infinity", 
        "timeout": 10001, 
        "transports": ["websocket"]
        }
    );
</script>

수일 전 스택 오버플로우 답변 조합에서 이 내용을 기억합니다. 그러나 이를 언급할 주요 링크를 찾을 수 없었습니다.

다음은 공식 문서의 해결 방법입니다.

소켓 이후로.IO v3, CORS(Cross-Origin Resource Sharing)를 명시적으로 활성화해야 합니다.

const io = require("socket.io")(httpServer, {cors: {
origin: "https://example.com", // or "*"
methods: ["GET", "POST"]}});

저에게 적합한 조합은 다음과 같습니다.

socketio = require('socket.io')(http, {
  origins: process.env.WEB_URL, // http(s)://...
  cors: {
    origin: process.env.WEB_URL,
    credentials: true
  }
}).listen(process.env.SOCKET_PORT) // 8899

app.set('socketio', socketio)

백엔드용으로 socket.io 버전을 2.x.x에서 4.1.2로 업데이트했을 뿐입니다.프론트엔드의 socket.io -client 버전을 2.x.x에서 4.1.2로 업데이트했습니다...그리고 그것은 성공하였다.

그래서 기본적으로 v2에서는 소켓.IO 서버는 CORS(Cross-Origin Resource Sharing)를 허용하기 위해 필요한 헤더를 자동으로 추가하여 클라이언트와 서버 간 연결에 문제가 없었습니다.그러나 이러한 동작은 편리하기는 하지만 모든 도메인이 소켓에 도달할 수 있도록 허용되었기 때문에 보안 측면에서는 그다지 좋지 않았습니다.IO 서버.

v3 이상 버전에서는 CORS가 기본적으로 비활성화됩니다.따라서 서버측 스크립트에서 해당 스크립트를 명시적으로 사용 가능으로 설정해야 합니다.

내 코드의 예:

socket.io 의 v2에서 서버 스크립트는 다음과 같이 보였습니다.

const io = require('socket.io')(8000);

그러나 v3 이상 버전에서는 이 코드가 다음과 같이 됩니다.

const io = require('socket.io')(8000, {
    cors: {
            origin: ['http://localhost:5500'],
     },
  });

// 클라이언트가 소켓 서버와 통신할 수 있도록 cors를 설정하여 기억합니다.

// 이 경우 8000은 소켓 연결이 실행 중인 포트이고 5500은 클라이언트 파일이 호스팅되는 포트입니다.

// 소켓 연결은 다른 포트에서 실행되고 클라이언트 파일은 다른 포트에서 실행됨

// 를.socket.io-client이 당신의oo 을 곳.

좀 더 명확한 설명을 위해 파일을 추가합니다.

이것은 나의 HTML 파일입니다.

<!DOCTYPE html>
  <html lang="en">
   <head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <script src="http://localhost:8000/socket.io/socket.io.js"" content="text/javascript"></script>
    <script src="javascript/client.js"></script>
    <link rel="stylesheet" href="css/style.css">
    <title>Chat App</title>
   </head>
   <body>
   </body>
  </html>

여기 제 javascript/client.js가 있습니다.

const socket = io('http://localhost:8000/');

여기는 server/server.js 입니다.

const io = require('socket.io')(8000, {
  cors: {
   origin: ['http://localhost:5500'],
   },
 });

io.on('connection', socket =>{
  console.log(socket.id);
 });

// 그래도 못 찾으실 경우 https://socket.io/docs/v4/migrating-from-2-x-to-3-0/ #CORS-handling에서 자세한 정보를 확인하실 수 있습니다.

// 또한 이 솔루션을 얻은 동영상 https://youtu.be/ZKEqqIO7n-k

const io = require('socket.io')(server, {
    cors: {
        origin: ['https://example.com','http://example.com','ip-address'],
    }
});

오리진 사용 안 함: '*' 이는 큰 보안 실수입니다!

origin은 서로 다른 엔트리 유형을 가진 배열처럼 사용할 수 있습니다.

  • http/https와 같은 프로토콜을 사용하는 URI
  • IP 주소
  • process.env와 같은 환경 변수.WEB_URL

저도 같은 문제가 있었고 어떤 해결책도 제게 효과가 있었습니다.

그 이유는 allowRequest를 사용하여 쿼리 매개 변수에서 전달하는 토큰을 사용하여 연결을 수락하거나 거부하는 것입니다.

클라이언트 쪽의 쿼리 매개 변수 이름에 오타가 있어서 연결이 항상 거부되었지만 브라우저에서 cors에 대한 불만이 제기되었습니다...

오타를 고치자마자 예상대로 작동하기 시작했고, 별도로 사용할 필요도 없고, 글로벌 익스프레스 코르 설정만으로도 충분합니다.

따라서 allowRequest를 사용하고 있는 사용자에게 문제가 있다면 브라우저에 오류가 표시되므로 이 기능이 제대로 작동하는지 확인하십시오.연결을 거부하고 싶을 때 cors 헤더를 수동으로 추가하지 않는 한, 아마 그럴 것 같습니다.

socket.io 과 socket.io -client 모두에 동일한 버전을 사용하면 문제가 해결되었습니다.

노드 서버가 중지될 때 이 문제가 발생하는 경우가 있습니다.따라서 노드 서버가 정상적으로 작동하는지 확인합니다.

그러면 io.set'', 'http://yourdomain.com:PORT_NUMBER'); 을 사용할 수 있습니다.

저는 socket.io 버전 2.4.0을 쉽게 사용하였습니다.RTC와 server_ssl.js에서 다음 코드를 사용하여 저에게 적합했습니다.

io = require("socket.io")(webServer, {
  handlePreflightRequest: (req, res) => {
    res.writeHead(200, {
      "Access-Control-Allow-Origin": req.headers.origin,
      "Access-Control-Allow-Methods": "GET,POST,OPTIONS",
      "Access-Control-Allow-Headers": "Origin, X-Requested-With, Content-Type, Accept, Referer, User-Agent, Host, Authorization",
      "Access-Control-Allow-Credentials": true,
      "Access-Control-Max-Age":86400
    });
    res.end();
  }
});

Chrome, Safari 및 기타 브라우저에서 socket.io 앱이 작동하지만 Firefox의 CORS 문제가 여전히 발생하고 자체 서명 인증서를 사용하는 경우 문제는 Firefox가 기본적으로 자체 서명 인증서를 허용하지 않는다는 것입니다.그리고 Firefox의 Preferences > Certificates > View Certificates > Add Exception으로 이동하여 예외를 추가해야 합니다.

이렇게 하지 않으면 Firefox에 게시한 오류가 표시되어 오해의 소지가 있지만 Developer Tools의 깊은 부분에서 MOJILLA_PKIX_ERROR_SELF_SIGNED_CERT라는 오류가 표시됩니다.이는 Firefox가 자체 서명되었기 때문에 인증서를 전혀 수락하지 않는다는 것을 의미합니다.

const options = {
  cors: {
    origin:
      String(process.env.ORIGINS_STRING) === "ALL"
        ? true
        : String(process.env.ORIGINS_STRING).split(","),
    methods: ["GET", "PUT", "POST", "DELETE"],
    allowedHeaders: [
      "Access-Control-Allow-Headers",
      "X-Requested-With",
      "X-Access-Token",
      "Content-Type",
      "Host",
      "Accept",
      "Connection",
      "Cache-Control",
    ],
    credentials: true,
    optionsSuccessStatus: 200,
  },
};

.env 파일:

ORIGINS_STRING=ALL

아니면

ORIGINS_STRING=http://localhost:8080,http://localhost:8081

같이 일했어요.socket.io: 4.2.x,node: 14.17.x&@hapi/hapi: 20.1.x.

다른 답변에서 언급된 바와 같이 여러 가지 방법을 시도한 결과, 다음과 같은 버전에 대해 작동하는 솔루션은 다음과 같습니다.

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

당신이 가지고 있는지 확인해 주세요.{ cors: { origin: '*' } }options 개체에 저장합니다.

소켓을 사용하고 있습니다.암시적인 http 서버가 있는 IO와 socket io의 v4.4를 사용하고 있는데 서버에서 이렇게 해야 했습니다.

const { Server } = require("socket.io");

const io = new Server(PORT, {})
io.engine.on("headers", (headers, req) => {
    headers["Access-Control-Allow-Origin"] = "http://yourdomain.com"
    headers["Access-Control-Allow-Headers"] = "origin, x-requested-with, content-type"
    headers["Access-Control-Allow-Methodsn"] = "PUT, GET, POST, DELETE, OPTIONS"
})

언급URL : https://stackoverflow.com/questions/24058157/socket-io-node-js-cross-origin-request-blocked

반응형