コンテンツにスキップ

HTTP

HTTPとは

HTTP(HyperText Transfer Protocol)は、Web上でデータをやり取りするための通信プロトコルである。

主に

  • Webサイトの表示
  • API通信
  • ブラウザとサーバーのやり取り

に使われる。


HTTPの基本構造

HTTPは

クライアント ↔ サーバー

の形で通信する。


例

ブラウザ
 ↓ HTTPリクエスト
Webサーバー
 ↓ HTTPレスポンス
ブラウザ

クライアントとサーバー

クライアント

リクエストを送る側。

例

  • ブラウザ(Chromeなど)
  • スマホアプリ
  • マイコン(ESP32など)

サーバー

リクエストに対してデータを返す側。

例

  • Webサーバー
  • APIサーバー

HTTPの仕組み

HTTPは基本的に

リクエスト → レスポンス

の1往復で完結する。


状態を保持しないため

ステートレス

なプロトコルである。


HTTPリクエスト

クライアントがサーバーに送る要求。


構成

メソッド
URL
ヘッダー
ボディ(必要な場合)

HTTPメソッド

代表的なメソッドは以下。

メソッド 役割
GET データ取得
POST データ送信
PUT 更新
DELETE 削除

GET

データを取得する

例

https://example.com/api/user

POST

データを送信する

例

ユーザー登録
ログイン

HTTPレスポンス

サーバーからの返答。


構成

ステータスコード
ヘッダー
ボディ(データ)

ステータスコード

HTTPでは結果を数値で表す。

コード 意味
200 成功
301 リダイレクト
400 クライアントエラー
401 認証エラー
403 禁止
404 見つからない
500 サーバーエラー

HTTPSとの違い

HTTPは平文通信。

HTTP → 暗号化なし

HTTPSは

HTTP + TLS/SSL

で暗号化されている。


特徴

項目 HTTP HTTPS
暗号化 なし あり
安全性 低い 高い
ポート 80 443

現在のWebでは

HTTPSが標準

である。


HTTPヘッダー

追加情報を送る部分。

例

Content-Type: application/json
Authorization: Bearer token

用途

  • データ形式指定
  • 認証情報
  • キャッシュ制御

HTTPボディ

実際のデータ部分。

例(JSON)

{
  "name": "Taro",
  "age": 20
}

主にPOSTやPUTで使われる。


JSONとの関係

HTTPではJSONがよく使われる。

理由

  • 軽量
  • 読みやすい
  • 多言語対応

例

HTTP + JSON = APIの基本構成

REST APIとの関係

HTTPを使った設計の一種がREST APIである。

例

GET /users
POST /users
DELETE /users/1

ブラウザの動き

ブラウザはHTTPを使ってページを取得する。

URL入力
 ↓
DNS
 ↓
HTTPリクエスト
 ↓
HTML取得
 ↓
レンダリング

HTTPの通信の流れ

例:Webページ表示

1. URL入力
2. DNSでIP取得
3. TCP接続
4. HTTPリクエスト送信
5. HTML受信
6. CSS/JS取得
7. 描画

API通信の例

GET /api/sensor

レスポンス

{
  "temp": 25.3
}

マイコンとHTTP

ESP32やRaspberry PiはHTTP通信が可能。

例

センサ
 ↓
ESP32
 ↓ HTTP
サーバー

STM32単体では難しいが、

  • Wi-Fiモジュール
  • Ethernet

を使えば可能。


よくあるトラブル

404エラー

URLが存在しない。


500エラー

サーバー側のバグ。


CORSエラー

ブラウザのセキュリティ制限。


タイムアウト

通信が遅い or 切断。


CORSとは

ブラウザの制限で

別ドメインへのアクセス制限

がある。


API開発ではよく遭遇する問題である。


HTTPの進化

  • HTTP/1.1
  • HTTP/2
  • HTTP/3(QUIC)

HTTP/2以降では

  • 高速化
  • 並列通信
  • 圧縮

が改善されている。


まとめ

HTTPはWeb通信の基本プロトコルである。

  • クライアントとサーバーで通信する
  • GET/POSTなどのメソッドを持つ
  • ステータスコードで結果を表す
  • HTTPSで暗号化される
  • JSONと組み合わせてAPIで多用される

Web開発から組み込み通信まで幅広く使われる重要な基礎技術である。

余談

HTTPでは中間攻撃者にとても弱いため暗号が技術(SSL/TLS)を使用した暗号化通信HTTPSが現在は普及している。