我使用 Helmet 和 Express 从服务器端设置相当多的安全 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 (显然它有助于标头,根据:here),但我也无法弄清楚。
你们能帮忙吗?