javascript - Node.js + Socket.io |在服务器上设置自定义 header

标签 javascript node.js websocket socket.io engine.io

我使用 Helmet 和 Express 从服务器端设置相当多的安全 HTTP header 。当在 node.js 应用程序之上呈现客户端页面时,这做得很好,使用:

var app = express();
app.use(helmet());
..
res.render("pages/index", data);

索引页面上的所有资源都将包含 Helmet header 。不幸的是,socket.io 有自己的头部管理。因此,/socket.io/之后的任何内容都将具有不安全的/它自己的 header 。例如这里:

<https_path>/socket.io/socket.io.js
<https_path>/socket.io/?EIO=3&transport=polling&t=Lj4CFnj&sid=ILskOFWbHUaU6grTAAAA

因此,我想为所有 socket.io 项目手动设置自定义 header 。

这就是我需要 socket.io 的方式(仅摘录):

/src/app.js

var express = require("express");
var sio = require("socket.io");
var app = express();
var io = require("./../lib/io.js").initialize(app.listen(REST_PORT, () => {
    logger.info("Application ready on port " + REST_PORT + " . Environment: " + NODE_ENV);
}));

/lib/io.js

exports = module.exports = {};
var sio = require("socket.io");
exports.initialize = function(server) {
    var options = {
        cookie: false,
        extraHeaders: {
        "X-Custom-Header-For-My-Project": "Custom stuff",
        }
    };
    io = sio(server, options);
    io.on("connection", function(socket) {
    // logic
)};

“extraHeaders”选项不起作用,我猜它只能用于 socket.io-client。我进行了大量谷歌搜索,但运气不佳。

还查看了如何使用 socket.request(根据 here 显然它有助于 header ),但我也无法弄清楚。

你们能帮忙吗?

最佳答案

extraHeaders 选项将按如下方式工作,因为您需要删除“transports: ['polling']”,以防您使用,并使用以下模式。这对我有用,并且能够发送自定义 header 。

使用的包:- "socket.io-client": "^2.2.0",

this.socket = io(environment.host, {
   path: `/api/backend/socket.io`,
   origins: '*:*',
   // transports: ['polling'],
   transportOptions: {
     polling: {
        extraHeaders: {
           'authorization': token,
           'user-id' : userId
        }
     }
    }
 })

引用:- https://socket.io/docs/client-api/#With-extraHeaders

关于javascript - Node.js + Socket.io |在服务器上设置自定义 header ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43261827/

相关文章:

apache - Websocket 在 Chrome 上连接,但不在 Firefox 上连接

javascript - 如何在 Ember.js 中保存属性类型为 'date' 的模型?

node.js - 为什么设置 webhook 后 telegram 不发送更新?

node.js - 使用另一个 Node 版本重新编译 Node 依赖项

node.js - 比较 MMO 的 Now.js 和 Socketstream 可扩展性

ruby-on-rails - 私有(private)酒吧 - 从 Controller 发布永远行不通

javascript - 如何在 Typescript 中扩展组件,并找出所需的参数?用例 : Angular - extending mat-side-nav

javascript - 用户尝试平移时图像闪烁

javascript - jQuery 加载微调器未显示

mysql - 从nodejs调用存储过程返回错误