2

これがシナリオです。サイトに ActionCable を使用しています ( と呼びましょうwww.example.com)。開発では完璧に動作しますが、Heroku にプッシュすると、WebSocket 接続で 302 エラーが発生します。

この問題は、Heroku でカスタム ドメインを使用していることが原因のようです。このため、WebSocket を にポイントすると、302 が表示されます。これは、 URLwss://example.comにリダイレクトされているためだと思いますか?example.herokuapp.com

したがって、この問題を考慮して、代わりに WebSocket 接続をwss://example.herokuapp.com. 私が今直面している問題は、それが基本的に私が指摘している新しいドメインであるため、example.com からの Cookie が と共有されないことexample.herokuapp.comです。これはexample.herokuapp.com、認証に使用する example.com で実際に設定されている空白の Cookie を渡していることを意味します。

署名されていないCookieをログに記録し(テストのために一時的に署名されていないだけで、セキュリティについて心配しないでください)、example.herokuapp.comサーバーにそのCookieを設定することで、これが問題であることを確認しました。その後、見事に機能しました。

明らかに、ひどいクッキーを設定するためだけに誰かに両方のサイトにアクセスさせることはできません...

私が望んでいるのは、元の問題を修正する方法を見つけて、WebSocket を私のカスタム ドメインに向けることができ、wss://example.comCookie 署名の問題を心配する必要がないことです。これは可能ですか?

example.herokuapp.comそうでない場合、ドメインに Cookie を設定する最良の方法は何ですか?

PS はい、ActionCable と Heroku に関する他の SO の質問を見てきましたが、カスタム ドメインを扱っているものはないようです。これは Cookie の回避策について述べていますが、これらは同じサブドメインではないため、このシナリオでは機能しないと思います: Action Cable を使用しながら Ruby on Rails アプリを Heroku にデプロイする (Puma ポート リスニング)

私を助けるために時間を割いてくれてありがとう:)

[編集] ここでこの質問に非常に似ているようですが、503 ではなく 302 が返されます。Heroku エラー 503、複数のドメインの webSockets

4

3 に答える 3

2

したがって、この問題は、WebSocket リクエストが WebSocket リクエストとしてではなく、通常のアップグレードされていないリクエストとして処理されていたことが原因であると思われました。そして、そのようなものはデバイスによってリダイレクトされていました。

HTTP_UPGRADE ヘッダーがない理由は、CloudFlare によるものであることがわかりました。非エンタープライズ アカウント ($5000 以上) では WebSocket が有効になっていません。CloudFlareにアカウントで有効にするように依頼できるSlackOverflowの他の質問を読んだことがありますが、すべてのアカウントタイプで有効にし始めるまでは発生しない可能性が最も高い.

CloudFlare が WS をオンにするまでの他の唯一のオプションは、カスタム ドメインと Heroku ドメインの間で Cookie を共有/設定する方法を見つけることです。これに対する解決策はまだ見つかっていません。Heroku の助けを待っています。CloudFlare + Custom Domain Heroku + Action Cable ユーザー向けのソリューションを入手できれば、将来の Google 社員のためにこの回答を更新します。

于 2015-11-21T15:05:34.440 に答える