【问题标题】:Node.js / Socket.io Access-Control-Allow-Origin error on both local and remote site本地和远程站点上的 Node.js / Socket.io Access-Control-Allow-Origin 错误
【发布时间】:2013-05-09 09:23:24
【问题描述】:

世界! 我正在尝试通过我的 node/socket.io 服务器向我的客户端获取 JSON 提要。 我一直在本地或远程(使用nodejitsu)得到以下错误: XMLHttpRequest 无法加载 http://jsonfeed.url。 Access-Control-Allow-Origin 不允许来源http://example.com。

根据我的研究和测试,它不依赖于我的浏览器,而是依赖于我的服务器代码。请赐教!

服务器代码(我可以提供更多,但尽量简洁):

var fs = require('fs'),
http = require('http');

//use of a fs and node-static to serve the static files to client

function handler(request, response) {
"use strict";
response.writeHead(200, {
                     'Content-Type': 'text/html',
                     'Access-Control-Allow-Origin' : '*'});
fileServer.serve(request, response); // this will return the correct file
}

var app = http.createServer(handler),
iosocks = require('socket.io').listen(app),
staticserv = require('node-static'); // for serving files

// This will make all the files in the current folder
// accessible from the web
var fileServer = new staticserv.Server('./');
app.listen(8080);

就是这样,我什么都试过了……是时候召唤天才了!

【问题讨论】:

  • 你缺少一个 ;在http = require('http'); 上,除非这只是部分代码:)
  • 是的,部分代码 ^^ 服务器运行良好,除了 getJSON 之外,我用它做的所有事情。谢谢,为清楚起见进行了编辑!
  • 你有没有想过用Express v3 代替普通的Node.js,它会让你的生活变得更轻松。我在使用 Express 时从来没有遇到过这个问题,我不知道它处理事情有多大不同,但就像我说的,我的套接字没有出现这个错误
  • 不幸的是我不能。在使用 express 之前,我已经让自己完全理解节点,而我的 500 行代码迟到改变主意。 (不会犯同样的错误两次...)
  • 这听起来像是一个简单的 XSS 错误。您确定客户端上发出 AJAX 请求的 javascript 文件是从与您尝试访问的 AJAX url 相同的域(包括子域)加载的?基本上没有任何前端代码很难知道这里发生了什么。

标签: javascript node.js socket.io cors


【解决方案1】:

好的,我该怎么说...首先感谢 StackOverflow 和那些试图回答的人,那里比以前冷了一点,继续前进。

那么... 它正在工作。 我不知道为什么,这很烦人。 我所做的只是删除:

response.writeHead(200, {
                 'Content-Type': 'text/html',
                 'Access-Control-Allow-Origin' : '*'});

就这样。就像一开始不工作一样!

额外的问题,有人可以告诉我为什么吗?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-01-03
    • 2012-07-27
    • 1970-01-01
    • 2013-12-20
    • 1970-01-01
    • 2021-03-07
    • 2018-10-03
    • 2018-12-12
    相关资源
    最近更新 更多