SOはWebSocketを使用します。たとえば、この投稿にコメントが作成されると、SOページの左上にあるステータスバーに通知が表示されます。
ページが読み込まれると、ブラウザは次のようなプロトコルアップグレード要求を行います。
Request URL:ws://sockets-se.or.stackexchange.com/
Request Method:GET
Status Code:101 Switching Protocols
Request Headersview source
Connection:Upgrade
Cookie:__qca=P0-1697817643-1763440830313; __utma=27376923.959753990.1338240830.1353943751.1384115154.33; __utmc=27693525; __utmz=27699983.1356175156.31.31.utmcsr=google|utmccn=(organic)|utmcmd=organic|utmctr=(not%20provided)
Host:sockets-se.or.stackexchange.com
Origin:http://stackoverflow.com
Sec-WebSocket-Extensions:x-webkit-deflate-frame
Sec-WebSocket-Key:6qFl45+6gZ526yMMo79zWQ==
Sec-WebSocket-Version:13
Upgrade:websocket
(Key3):00:00:00:00:00:00:00:00
Response Headersview source
Connection:Upgrade
Sec-WebSocket-Accept:B4h2G+gi78iNZZXg+o6iAztgF1I=
Upgrade:websocket
(Challenge Response):00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00
その後、ソケットが開かれ、サーバーは更新をブラウザーに送信できます。たとえば、私のコメントの通知は、ブラウザによって次のように受信されます。
{"action":"1-question-12993099","data":"{\"a\":\"comment-add\",\"id\":12993099,\"commentid\":19334206,\"acctid\":1298157}"}
実際のコメントは含まれていません。これは単にブラウザに赤いアイコンを表示するように指示するために使用されているようです。次にクリックすると、コメントを含むページの取得を要求します。そのフレームには、質問ID(12993099)、コメントID(19334206)、アカウントID(1298157)が含まれています。
上記の内容では、ハッカーが通知を聞くためのWebソケットを作成するのを妨げるものは何も見当たりません。クッキーは私にはGoogleAnalyticsのクッキーであるように見えます。少なくとも2番目と3番目のクッキーはそうです。おそらく最初は、私がそれを公開しただけではなかったら、あなたが知らないであろういくつかのコードです(心配しないでください、私はそれを変更します!)。
Atmosphereの例では、Web Socketsが機能しない場合、デフォルトで長いポーリングが行われ、チャネル名を含むURLが要求されることがわかっています。したがって、クライアントにチャネル名を生成させ、それをクライアントだけが認識し、それをログインしたユーザーに関連付けることができます。ただし、ネットワークをスニッフィングする人は誰でもトラフィックにアクセスできるため、セキュアWebソケット(WSS)とHTTPS(長いポーリングフォールバック用)を使用してネットワークを保護する必要があります。