WebSocketとは?HTTPとの違いを知る

ブログ

Blog
  1. ホームページ制作はアウラ:ホーム
  2. ブログ
  3. WebSocketとは?HTTPとの違いを知る

WebSocketとは?HTTPとの違いを知る

WebSocketとは?HTTPとの違いを知る

こんにちは、エンジニアの仁木です。

最近のWebアプリケーションでは、WebSocketと呼ばれる通信プロトコルが多く利用されています。
このWebSocketとは何か、またWebで広く利用されているHTTPとは何が違うのかをご紹介したいと思います。

WebSocket(ウェブソケット)とは?

WebSocketとは通信プロトコルの1つで、クライアント⇔サーバー間の双方向でデータを通信する規格です。
今回はクライアントはGoogle ChromeやEdgeなど、Webページにアクセスする際に使用するブラウザを指すので、以降は「ブラウザ」で表記します。

現在ではSNSの通知や、協力して遊ぶオンラインゲーム、チャットしながら参加するライブストリーミングなど、多種多様なインタラクティブなコンテンツがブラウザ上で利用できるようになっています。
これらのリアルタイム性が重要なインタラクティブコンテンツを実現するためにWebSocketが利用されています。

HTTP(HTTPS)との違いは?

先に触れたリアルタイム性が重要でない多くのWebサイトは、WebSocketは利用せずHTTP(HTTPS)プロトコルのみが利用されています。
WebSocketもHTTPもどちらも通信プロトコルであり、Web上でブラウザ⇔サーバー間でデータ通信するための規格です。

HTTPとWebSocketの大きな違いというのは、クライアント⇔サーバーの双方向で通信ができるかどうかにあります。

URLでみると、以下のように先頭のプロトコルの指定が変わります。

HTTP http://~~~
WebSocket ws://~~~

HTTPはクライアント⇒サーバーへの1方向のみ

HTTPでは、ブラウザからサーバーにリクエストが来た時のみデータを返すことができます。逆に言うと、ブラウザからリクエストが来ない限りサーバーから勝手にデータを配信することはできません。

そのため、Webページを表示しつづけていてもブラウザ側でページを更新しなければ新しいデータは取得できません。
(例えば、SNSやチャットなどで新しいメッセージが届いていても、ブラウザを更新しないと確認できないといった状態です)

HTTPでリアルタイム性のある通信を実現するためには、一定間隔でブラウザからサーバーにリクエストをしなければならず、リクエストが増えることによるサーバー側の負荷が問題となります。

またブラウザ⇔サーバー間は、リクエストを受けてデータを返すという1往復で接続は終了し、新しくリクエストが来れば新しい接続を開始します。

WebSocketはサーバーからブラウザへプッシュ配信が可能

WebSocketでは、ブラウザとサーバーが接続(コネクション)を一度確立できれば、以降のデータのやり取りはコネクションを通じて行われます。
ブラウザとサーバーの間で接続が確立された状態なので、サーバー側でイベントが発生すれば、そのタイミングでブラウザ側にデータを配信することができます。

これには以下のメリットがあります。

  • 通信が確率された状態なので、通信時のオーバーヘッドが少なくなり遅延を減らせる
  • 通信毎にリクエストが発生しないので、サーバー側の負荷が軽減される

WebSocketを使う時に気をつけたいこと

ユーザーにとって便利な機能を開発できるWebSocketですが、導入時に気をつけておきたいこともあります。

サーバーのリソース設計

WebSocketを利用するWebアプリケーションは、リアルタイム性が重要なため、データのやり取りが多く発生することが考えられます。
多くの通信を捌けるようにサーバー側のリソース設計を十分に検討する必要がありそうです。

セキュリティ対策

WebSocketの通信はWSS (WebSocket over SSL/TLS) と呼ばれる、HTTPにおけるHTTPSのように暗号化通信のプロトコルを利用するのが推奨されます。
また、通常のHTTPと同じ用にXSS(クロスサイトスクリプティング)やクロスサイトリクエストフォージェリ(CSRF)攻撃の対策も行う必要があります。

接続状態の管理

WebSocketの通信が強制的に終了してしまった場合や、意図しない操作で接続が終了してしまった場合の再接続処理やエラー通知の仕組みを実装しておく必要があります。

まとめ

今はデスクトップアプリに負けないWebアプリケーションが増えてきていますが、WebSocketのような技術規格が開発されることで様々なサービスを利用できるようになったのだなと思います。
今後も様々なサービスの要望に応えられるよう技術力をあげていきたいと思います。

お電話でのお問い合わせはこちら:06-6292-8577。受付時間は平日9:30~18:30 インターネットからは24時間受付中!お問い合わせフォームはこちら
Webデザイナー、Webプログラマ募集中!