Node.js + Socket.io | 在服务器上设置自定义头部

3
我使用Express与Helmet一起来设置服务器端的许多安全HTTP头部。当在node.js应用程序上渲染客户端页面时,可以很好地完成这项工作,使用以下代码:
var app = express();
app.use(helmet());
..
res.render("pages/index", data);

首页的所有资源都将拥有Helmet头信息。不幸的是,socket.io会使用自己的头信息管理。因此,在/socket.io/之后的任何内容都将具有不安全/自己的头信息。例如:
<https_path>/socket.io/socket.io.js
<https_path>/socket.io/?EIO=3&transport=polling&t=Lj4CFnj&sid=ILskOFWbHUaU6grTAAAA

因此,我希望手动为所有socket.io项目设置自定义标头。
这是我如何要求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(根据这里,它可以帮助处理头文件),但我也无法理解。
你们能帮忙吗?
1个回答

6

extraHeaders选项的作用如下,如果您使用了"transports: ['polling']",则需要将其删除,并使用以下模式。这对我很有效,并且能够发送自定义头。

使用的软件包: "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

在使用socket.io的客户端API时,可以通过extraHeaders选项设置额外的HTTP标头。这对于需要将认证令牌等信息传递给服务器的应用程序很有用。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接