socket.io-client で HTTP ヘッダーを設定する

Socket.IO を利用する際に, HTTP ヘッダーに認証トークンや Cookie を設定したいというケースがあります. 従来 HTTP ヘッダーを Socket.IO で設定することは難しいとされていましたが, socket.io-client 1.4 以降では extraHeaders を用いて設定できるようになっています.

使い方

クライアント側で Socket.IO の接続を行う際にのオプションに extraHeaders を設定することで, リクエストに追加の HTTP ヘッダーを設定出来ます.

var socket = require('socket.io-client')('http://localhost', {
  extraHeaders: {
    Authorization: "Bearer authorization_token_here"
  }
});

サーバー側では socket.request.headers でリクエストの HTTP ヘッダーを取得できます.

extraHeaders について

extraHeaders は socket.io-client 1.4 から利用出来るようになったオプションです. extraHeaders は socket.io-client のバックエンドを担う engine-io.client のバージョン 1.6 で追加されました.

その他

例えば, extraHeaders で Authorization ヘッダーを設定することで, 簡単に BASIC 認証に対応させることが出来ます. 簡易の認証として BASIC 認証を利用することは便利です.

この件について Stack Overflow にも回答を書きました.