Webアプリケーションの根幹をなすのが HTTP (HyperText Transfer Protocol) です。クライアント(ブラウザなど)とサーバーが情報をやり取りするためのルール(プロトコル)を理解することは、バックエンドエンジニアの基本です。また、通信の安全性を確保する HTTPS の仕組みも重要です。
1. HTTPの基本概念
HTTP (HyperText Transfer Protocol) / 説明: Web上でデータをやり取りするためのプロトコルです。クライアントがリクエストを送り、サーバーがレスポンスを返すというリクエスト-レスポンスモデルに基づいています。
ステートレス性 / 説明: HTTPはステートレス、つまり、サーバーは過去のやり取り(状態)を基本的に記憶しません。これにより、サーバー負荷が軽減されますが、ユーザーのログイン状態などは別途Cookieやセッションで管理する必要があります。
ポート番号 / 説明: HTTP通信は通常、ポート番号80を使用します。
2. HTTPSとセキュリティ
HTTPS (HTTP Secure) / 説明: HTTPにSSL/TLSという暗号化プロトコルを組み合わせ、通信内容を暗号化するプロトコルです。
SSL/TLS / 説明: Secure Sockets Layer / Transport Layer Security の略で、クライアントとサーバー間の通信を暗号化し、盗聴や改ざんを防ぐための技術です。
ポート番号 / 説明: HTTPS通信は通常、ポート番号443を使用します。
暗号化の重要性 / 説明: パスワードや個人情報など、機密性の高い情報を安全に送受信するために、現代のWebサービスではHTTPSの使用が必須です。
3. HTTPリクエストの構成要素
クライアント(ブラウザなど)がサーバーに情報を要求するメッセージです。
メソッド(Method) / 使用例:
GET,POST,PUT,DELETE/ 説明: サーバーに「何をしたいか」を伝えます。データを取得したいのか(GET)、新しく作成したいのか(POST)など。URL(Uniform Resource Locator) / 説明: サーバーのどこにあるリソースにアクセスしたいかを指定するアドレスです。
ヘッダー(Header) / 使用例:
User-Agent,Content-Type,Cookie/ 説明: リクエストの付加情報(データの種類、クライアント情報、認証情報など)を記述します。ボディ(Body) / 説明:
POSTやPUTなどのメソッドを使用する際、サーバーに送りたい具体的なデータ(例: フォームに入力されたデータ、JSONデータ)を含めます。
4. HTTPレスポンスの構成要素
サーバーがクライアントからのリクエストに対して返すメッセージです。
ステータスライン / 説明: 通信結果の概要を示します。
ステータスコード(Status Code) / 使用例:
200 OK,404 Not Found,500 Internal Server Error/ 説明: リクエストの結果(成功したか、エラーか、リダイレクトかなど)を3桁の数字で伝えます。バージョン / 使用例:
HTTP/1.1/ 説明: サーバーが使用しているHTTPのバージョンを示します。
ヘッダー(Header) / 使用例:
Content-Type,Set-Cookie,Location/ 説明: レスポンスの付加情報(返したデータの種類、キャッシュに関する指示など)を記述します。ボディ(Body) / 説明: クライアントが要求したデータ(例: HTMLファイル、画像データ、JSONデータ)そのものが含まれます。
5. 主なHTTPメソッドとステータスコード
主要なHTTPメソッド
GET / 目的: リソースの取得 / 説明: サーバーからデータを読み込むときに使用します。ボディは含まず、パラメータはURLに含めます。
POST / 目的: リソースの作成 / 説明: サーバーに新しいデータを送信・作成するときに使用します。データはリクエストボディに含めます。
PUT / 目的: リソースの完全更新 / 説明: 既存のデータ全体を、送られてきたデータで完全に置き換えるときに使用します。
DELETE / 目的: リソースの削除 / 説明: サーバー上の指定したリソースを削除するときに使用します。
主要なステータスコード(カテゴリ)
1xx (Informational) / 説明: リクエストを受け付けた。処理を継続中。
2xx (Success) / 使用例:
200 OK,201 Created/ 説明: リクエストは成功し、正常に処理されました。3xx (Redirection) / 使用例:
301 Moved Permanently,302 Found/ 説明: リクエストを完了するために、別の場所へ**転送(リダイレクト)**が必要です。4xx (Client Error) / 使用例:
400 Bad Request,404 Not Found,403 Forbidden/ 説明: クライアント側の問題(リクエストの形式が不正、存在しないURLへのアクセスなど)によるエラーです。5xx (Server Error) / 使用例:
500 Internal Server Error,503 Service Unavailable/ 説明: サーバー側の問題(プログラムのバグ、過負荷など)によるエラーです。
⭐ 演習課題
以下の状況で、クライアントがサーバーに送るリクエストと、サーバーが返すレスポンスの要素を考えてみましょう。
あなたがブラウザでログインフォームの情報を入力し、「ログイン」ボタンを押したとき、どのようなHTTPメソッドが使われるのが適切ですか?
存在しないページ(例:
/non_existent_page)にアクセスしたとき、サーバーから返されるステータスコードは何ですか?サーバー側でデータベース接続に失敗し、プログラムが予期せず停止したとき、クライアントに返されるステータスコードは何ですか?