fla*_*esh 3 javascript websocket node.js socket.io engine.io
我使用 Helmet 和 Express 从服务器端设置相当多的安全 HTTP 标头。当在 Node.js 应用程序顶部渲染客户端页面时,使用以下命令,这做得很好:
\n\nvar app = express();\napp.use(helmet());\n..\nres.render("pages/index", data);\nRun Code Online (Sandbox Code Playgroud)\n\n索引页上的所有资源都将具有 Helmet 标题。不幸的是,socket.io 有自己的标头管理。因此,/socket.io/ 之后的任何内容都将具有不安全/其自己的标头。例如这里:
\n\n<https_path>/socket.io/socket.io.js\n<https_path>/socket.io/?EIO=3&transport=polling&t=Lj4CFnj&sid=ILskOFWbHUaU6grTAAAA\nRun Code Online (Sandbox Code Playgroud)\n\n因此,我想手动为所有 socket.io 项目设置自定义标头。
\n\n这就是我需要 socket.io 的方式(仅摘录):
\n\n/src/app.js
\n\nvar express = require("express");\nvar sio = require("socket.io");\nvar app = express();\nvar io = require("./../lib/io.js").initialize(app.listen(REST_PORT, () => {\n logger.info("Application ready on port " + REST_PORT + " . Environment: " + NODE_ENV);\n}));\nRun Code Online (Sandbox Code Playgroud)\n\n/lib/io.js
\n\nexports = module.exports = {};\nvar sio = require("socket.io");\nexports.initialize = function(server) {\n var options = {\n cookie: false,\n extraHeaders: {\n "X-Custom-Header-For-My-Project": "Custom stuff",\n }\n };\n io = sio(server, options);\n io.on("connection", function(socket) {\n // logic\n)};\nRun Code Online (Sandbox Code Playgroud)\n\n“extraHeaders”选项不起作用\xc2\xb4t,我猜它只能与socket.io-client一起使用。我进行了大量的谷歌搜索,但运气不佳。
\n\n还查看了如何使用 socket.request (显然它有助于标头,根据:here),但我也无法\xc2\xb4t弄清楚这一点。
\n\n你们能帮忙吗?
\n小智 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
}
}
}
})
Run Code Online (Sandbox Code Playgroud)
参考:- https://socket.io/docs/client-api/#With-extraHeaders
| 归档时间: |
|
| 查看次数: |
9238 次 |
| 最近记录: |