kumama go言語とかgolangとかGAEとかネットサービスとかその他色々・・・

18Mar/100

websockets を proxy 環境でも利用する場合の注意点

ええとコメント頂いたのでまじめに書くことにします。
(ちょっとアングラな世界でドライバ作ってました)

現在のwebsocketsのクライアント側の実装でproxy越えをしようとする場合、サーバ側で特殊な考慮をしておかないと繋がらない環境が多いと思います。

ちょっとややこしいので順を追って説明します。

・クライアント側の実装でproxy越えする際にはProxyに対し CONNECT を発行する
・proxyでCONNECTできるのは接続先ポートがhttps(443)に制限されている場合が多い
(squidはデフォルト。443以外のSSLポートをSquidでプロキシするには辺り参考)
・一方、サーバ側はというとhttps使ってるならhttpsの場合が多い。
・websocketsで443に繋いだとしてもSSLのハンドシェークは行われない

以上から、proxy経由でのwebsocketsをなるべく利用可能にするならrawな(SSLでない)websocketsの口をポート443であけて置く必要があります。このblogに張ったwebsockets chatはこの対応をやってます。(httpsは潰してますw)

ま、現状の実装(websockets, proxy)での話しなのでこの先は分かりませんが…。

Filed under: golang Continue reading