サーバーとクライアントとは何か
ブラウザやアプリがクライアントとして要求を送り、サーバーが応答するWeb通信の基本構造を学びます。
Webサイトを見るとき、あなたのPCやスマホは、ただ画面を表示しているだけではありません。
実際には、ブラウザやアプリがインターネット上のサーバーへ要求を送り、サーバーが必要なデータを返しています。
このとき、要求を送る側をクライアント、要求を受け取って応答を返す側をサーバーと呼びます。
Web通信の多くは、このクライアントとサーバーの関係で成り立っています。
簡単に言えば、Web通信の基本は次の形です。
クライアントが要求する。 サーバーが応答する。
この記事では、Web通信の基本である「要求する側」と「応答する側」の関係を整理します。
Webサイトを見るとはどういうことか
あなたがブラウザでWebサイトを開くと、画面にはページが表示されます。
しかし、そのページは最初からあなたの端末の中に入っているわけではありません。
ブラウザがWebサイト側のサーバーへ通信し、ページを表示するために必要なデータを取得しています。
たとえば、あなたがある記事ページを開いたとします。
そのときブラウザは、サーバーに対して、
「このページのデータをください」
という要求を送ります。
サーバーはその要求を受け取り、ページを表示するために必要なデータを返します。
ブラウザは返ってきたデータを読み取り、文字、画像、ボタン、レイアウトなどを画面に表示します。
つまり、Webサイトを見るという行為は、次のような流れで成り立っています。
- ブラウザがサーバーへ要求を送る
- サーバーが要求を受け取る
- サーバーが必要なデータを返す
- ブラウザが受け取ったデータを画面に表示する
あなたから見ると、ただページを開いただけに見えます。
しかし裏側では、クライアントとサーバーの間で「要求」と「応答」が行われています。
クライアントとは何か
クライアントとは、通信において要求を送る側のことです。
Webサイトを見る場合、あなたのブラウザがクライアントになります。
たとえば、Chrome、Safari、Firefox、Edgeなどのブラウザは、Webサイトを見るためにサーバーへ要求を送ります。
ブラウザはサーバーに対して、
「このページを表示するためのデータをください」
と要求します。
そして、サーバーから返ってきたデータを使って、Webページを画面に表示します。
つまりブラウザは、単なる表示アプリではありません。
Webサイトのサーバーへ要求を送り、返ってきたデータを表示するクライアントです。
アプリもクライアントになる
クライアントになるのは、ブラウザだけではありません。
スマホアプリやPCアプリも、サーバーへ要求を送る場合はクライアントになります。
たとえば、SNSアプリを開くと、タイムライン、通知、プロフィール、画像、動画などが表示されます。
これらの情報は、すべてスマホの中に最初から入っているわけではありません。
アプリがサーバーへ要求を送り、サーバーから最新のデータを受け取っています。
たとえばSNSアプリは、サーバーに対して次のような要求を送ることがあります。
- タイムラインのデータをください
- 新しい通知を確認してください
- このユーザーのプロフィールをください
- この画像や動画のデータをください
サーバーはそれに応じて、必要なデータを返します。
そしてアプリは、受け取ったデータを画面に表示します。
クラウドメモアプリ、チャットアプリ、オンラインゲーム、ファイル共有アプリなども同じです。
必要なデータをサーバーへ要求し、返ってきたデータを使って動いています。
つまり、クライアントとは「ブラウザだけ」を指す言葉ではありません。
通信の中で要求を送る側が、クライアントです。
サーバーとは何か
サーバーとは、通信において要求を受け取り、必要なデータを返す側のことです。
Webサイトの場合、サーバーはWebサイトを表示するためのデータを持っています。
たとえば、ニュースサイト、検索エンジン、SNS、通販サイトなどは、利用者のブラウザやアプリから要求を受け取り、それに応じてデータを返しています。
サーバーが返すデータには、たとえば次のようなものがあります。
- HTML
- CSS
- JavaScript
- 画像
- 動画
- 記事本文
- 商品情報
- ユーザー情報
HTMLは、ページの文章や構造を表すデータです。
CSSは、文字の大きさ、色、配置など、見た目を決めるためのデータです。
JavaScriptは、ボタンを押したときの動きや、ページ上の処理を作るために使われるデータです。
画像や動画は、ページ内に表示されるメディアデータです。
ブラウザは、サーバーから返ってきたこれらのデータを読み取り、Webページとして画面に表示します。
1つのページでも複数の要求が行われる
Webページを1つ開くとき、ブラウザは1回だけ通信して終わるとは限りません。
ページを表示するためには、複数のデータが必要になることがあります。
たとえば、ある記事ページを開く場合、ブラウザはまずページ本体のデータを取得します。
その後、ページの見た目を整えるCSS、ページ上の動きを作るJavaScript、記事内の画像などを追加で取得することがあります。
つまり、あなたから見ると1つのページを開いただけでも、裏側では複数の要求が行われている場合があります。
たとえば、次のような要求です。
- ページ本体のデータをください
- デザイン用のデータをください
- 画像ファイルをください
- ページの動作用のデータをください
- 最新のコメントや通知をください
サーバーはそれぞれの要求に応じて、必要なデータを返します。
ブラウザは返ってきたデータを組み合わせて、1つのWebページとして画面に表示します。
このように、Webページは「サーバーから返ってきたデータをブラウザが組み立てて表示しているもの」と考えると理解しやすくなります。
Webサイトのデータはどこにあるのか
Webサイトのデータは、基本的にはサーバー側にあります。
あなたがWebサイトを開くと、ブラウザがサーバーへ接続し、必要なデータを取得します。
そして、取得したデータをブラウザが画面に表示します。
つまり、Webサイトを見るとは、サーバー上にあるデータをクライアントが取りに行き、それを自分の端末で表示することです。
ただし、一度読み込んだ画像やファイルの一部が、あなたの端末に一時的に保存されることもあります。
これは、同じページをもう一度開いたときに表示を速くするためなどに使われます。
それでも基本的な構造は変わりません。
Webサイトのデータはサーバー側にあり、クライアントが必要に応じてそれを取得します。
サーバーは1台の機械とは限らない
ここまで「サーバー」と一つの存在のように説明してきました。
しかし、実際のWebサービスでは、サーバーが必ず1台の物理的な機械とは限りません。
小さなWebサイトであれば、1台のサーバーで動いていることもあります。
しかし、大きなWebサービスでは、多くの利用者が同時にアクセスします。
そのため、複数のサーバーで処理を分担することがあります。
たとえば、次のような役割分担が行われる場合があります。
- Webページを返すサーバー
- 画像や動画を配信するサーバー
- ユーザー情報を管理するサーバー
- データベースを扱うサーバー
- アクセスを複数のサーバーへ振り分ける仕組み
また、現在ではクラウドを使ってWebサービスを動かすことも一般的です。
クラウドでは、Webサービスの運営者が自分で物理的な機械を用意するのではなく、クラウド事業者が提供するサーバー環境を利用します。
さらに、画像、動画、CSS、JavaScriptなどの配信にはCDNが使われることもあります。
CDNは、データを複数の場所に配置し、利用者に近い場所から配信するための仕組みです。
これにより、ページ表示が速くなったり、元のサーバーへの負荷が減ったりします。
ただし、細かい構造まで最初から覚える必要はありません。
まず重要なのは、サーバーはクライアントからの要求を受け取り、必要なデータを返す役割を持っているということです。
そして現実のWebサービスでは、その役割が1台の機械だけではなく、複数のサーバー、クラウド、CDNなどによって支えられている場合があります。
クライアントとサーバーは役割で決まる
クライアントとサーバーは、機械の種類だけで決まるわけではありません。
重要なのは、通信の中でどの役割をしているかです。
要求を送る側がクライアントです。
要求を受け取り、応答を返す側がサーバーです。
たとえば、あなたのPCは普段、Webサイトを見るときにはクライアントとして動いています。
しかし、そのPCでWebサービスを公開し、他の端末からの接続を受け付けるようにすれば、そのPCはサーバーとして動くこともできます。
つまり、クライアントとサーバーは「端末の名前」ではなく、「通信における役割」として理解すると分かりやすくなります。
匿名性を考えるうえで大事な視点
匿名性を考えるとき、クライアントとサーバーの関係は重要です。
なぜなら、Web通信では基本的に、あなたのブラウザやアプリが接続先のサーバーへ要求を送るからです。
サーバーは、クライアントからの要求を受け取ります。
そのため、Webサイト側には一定の情報が見える場合があります。
たとえば、Webサイト側には次のような情報が見える可能性があります。
- 接続元として見える
- アクセス時刻
- 要求されたページ
- ブラウザや端末に関する情報
- に関する情報
ここで重要なのは、「あなたの端末から直接そのWebサイトへ接続している場合」と、「、、プロキシ、CDNなどを経由している場合」では、相手側に見える情報が変わることです。
たとえば、Webサイトへ直接接続している場合、接続先のサーバーにはあなたの回線に割り当てられたIPアドレスが見える可能性があります。
一方、VPNやTorなどを経由している場合、Webサイト側にはあなたの本来のIPアドレスではなく、経由先のIPアドレスが見える場合があります。
また、Cookieが使われている場合、Webサイトは同じブラウザからのアクセスを識別できることがあります。
ただし、何がどこまで見えるのかは、通信経路、ブラウザ設定、Webサイト側の仕組み、HTTPSの有無、Cookieの使われ方などによって変わります。
この時点で理解しておくべきことは、細かい追跡技術ではありません。
まず重要なのは、Web通信ではクライアントがサーバーへ要求を送り、サーバーがその要求を受け取るという構造です。
この構造があるからこそ、「接続先のサーバーに何が見えるのか」という問題が出てきます。
匿名性を理解するには、まずこのクライアントとサーバーの関係を押さえる必要があります。
まとめ
クライアントとは、通信で要求を送る側です。
Webブラウザ、スマホアプリ、PCアプリなどは、サーバーへ要求を送るクライアントになります。
サーバーとは、要求を受け取り、必要なデータを返す側です。
Webサイトのデータは基本的にサーバー側に置かれており、ブラウザやアプリは必要なデータをサーバーから取得します。
Webページを見るとき、ブラウザはサーバーに対して「このページのデータをください」と要求します。
サーバーはHTML、CSS、JavaScript、画像などを返します。
ブラウザは受け取ったデータを読み取り、画面に表示します。
また、現実のWebサービスでは、サーバーが1台の物理的な機械とは限りません。
複数のサーバー、クラウド、CDNなどが使われることもあります。
それでも基本は変わりません。
クライアントが要求し、サーバーが応答する。
これがWeb通信の基本構造です。
匿名性を考えるときには、この構造を前提として、接続先のサーバーに何が見えるのかを考える必要があります。
関連ツール
WhatIsMyIP
WhatIsMyIPは、Webサイト側から見える現在のパブリックIPアドレスを確認できる検証サイトです。
紹介する理由: VPNやTorなどを使ったあと、接続先から見えるIPアドレスが意図した経路のものに変わっているかを確認する入口になるためです。
BrowserLeaks WebRTC
BrowserLeaks WebRTCは、WebRTC経由でブラウザから見えるIPアドレスや通信情報を確認できる検証ページです。
紹介する理由: VPNを使っていても、ブラウザ機能の設定によって意図しないIP情報が見えることがあるため、匿名環境の確認に役立ちます。
Tor Project
Tor Projectは、Tor BrowserとTorネットワークを開発・公開している公式プロジェクトです。
紹介する理由: Torは通信経路を隠す仕組みを学ぶ中心的な実例です。公式サイトでは、Tor Browserの入手、仕組み、利用上の注意を確認できます。
Proton VPN
Proton VPNは、Proton Mailなどプライバシー系サービスを長く運営しているProtonのVPNサービスです。
紹介する理由: VPNの信頼性を見るときに、対応端末、サーバー、透明性レポート、監査、オープンソースアプリなどを公式情報で確認しやすい実用候補として紹介します。
URL : https://protonvpn.com/
Mullvad VPN
Mullvad VPNは、メールアドレスやパスワードを要求しない番号アカウント方式を採るVPNサービスです。
紹介する理由: VPNを選ぶときに、登録情報を減らす設計、ログ方針、支払い方法、アプリ情報を公式サイトで確認できる候補として紹介します。
URL : https://mullvad.net/