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が現在は普及している。