heroku 上缺少 Access-Control-Allow-Origin 标头

Posted

技术标签:

【中文标题】heroku 上缺少 Access-Control-Allow-Origin 标头【英文标题】:Missing Access-Control-Allow-Origin header on heroku 【发布时间】:2015-01-15 22:20:45 【问题描述】:

开始时的一些服务器代码:

var util = require('util');
var express = require('express');
var http = require('http');
var sio = require('socket.io');

var app = express();
var server = http.createServer(app);
var io = sio.listen(server);

console.log('origins-> '+io.origins());
//io.set("origins","*:*");
io.origins("*:*");

server.listen(process.env.PORT || 80, function ()
    var addr = server.address();
    console.log('App listening '+JSON.stringify(addr));
);

app.get('/', function(req, res)
  res.sendFile(__dirname + '/index.html');
);

io.on('connection', function(socket)
console.log("user connected");

  socket.on('chat message', function(msg)
    io.emit('chat message', msg);
  );
);

这里是 git 仓库:https://github.com/Foxbond/heroku-socket-test

heroku 表示 http://foxclick.heroku.com

chrome 控制台报错:

XMLHttpRequest 无法加载 heroku/socket.io/?EIO=3&transport=polling&t=1416327810844-0。请求的资源上不存在“Access-Control-Allow-Origin”标头。因此,不允许访问 Origin 'heroku'。

响应标头:

HTTP/1.1 301 Moved Permanently
Connection: keep-alive
Server: Cowboy
Date: Tue, 18 Nov 2014 16:23:34 GMT
Content-Length: 0
Location: heroku/socket.io/?EIO=3&transport=polling&t=1416327810844-0

使用这些响应头在 localhost 上一切正常:

HTTP/1.1 200 OK
Content-Type: application/octet-stream
Content-Length: 101
Access-Control-Allow-Origin: *
Set-Cookie: io=cFBQp1g1WCDbE0_1AAAA
Date: Tue, 18 Nov 2014 16:28:03 GMT
Connection: keep-alive

我不知道我应该怎么做,我想我已经尝试了所有可能的解决方案。感谢您的帮助!

【问题讨论】:

【参考方案1】:

我遇到了类似的问题,尝试将 html 放在 xampp 或 Apache 等网络服务器上。

如果我使用套接字服务器在本地运行 html,通常在运行套接字时使用套接字,我会得到相同的 No 'Access-Control-Allow-Origin'。但是,如果您使用网络服务器,则不应该发生这种情况

【讨论】:

我托管 index.html 文件直接形成节点服务器的相同实例/形成独立的 Apache 服务器/直接形成驱动器。这不是问题,问题实际上是socket.io服务器的响应头不包含Access-Control-Allow-Origin: * 在 res.sendFile() 之后尝试res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");;行

以上是关于heroku 上缺少 Access-Control-Allow-Origin 标头的主要内容,如果未能解决你的问题,请参考以下文章

heroku 上缺少 Access-Control-Allow-Origin 标头

尝试在 Heroku 上托管 VueJS 应用程序。在 heroku 日志中获取“npm ERR!缺少脚本:开始”,在我的页面上获取“应用程序错误”

无法在 Heroku 上部署 Streamlit 应用程序 - 缺少 libgcc_s.so.1

Heroku 上的 Django - 缺少静态文件 manifest.json 文件

将 Rails 应用程序推送到 Heroku 时缺少“sqlite3.h”

Meteor MCrypt 应用程序无法在 heroku 上编译,因为它缺少 libmcrypt4 等