3

私は、Helmet と Express を使用して、サーバー側からかなりのセキュリティ HTTP ヘッダーを設定しています。これは、以下を使用して、node.js アプリの上にクライアント ページをレンダリングするときに適切に行われます。

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

インデックス ページのすべてのリソースには、ヘルメット ヘッダーがあります。残念ながら、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によると) が、それもわかりませんでした。

助けてくれませんか?

4

1 に答える 1

5

使用している場合は「transports: ['polling']」を削除する必要があるため、extraHeaders オプションは以下のように機能し、以下のパターンを使用します。これは私にとってはうまくいき、カスタムヘッダーを送信できました。

使用したパッケージ:- "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

于 2020-04-27T07:01:34.257 に答える