Webフレームワークの基盤
Webフレームワークの本質
import socket
server = socket.socket()
server.bind(("localhost", 8080))
server.listen(5)
while True:
client, address = server.accept()
request = client.recv(4096)
response = b"HTTP/1.1 200 OK\r\n\r\nHello Web"
client.send(response)
client.close()
この基本的なソケット実装がWebサーバーの核心であり、実際のWebフレームワークはこの構造を拡張したものです。
ブラウザリクエストの解析
import socket
web_server = socket.socket()
web_server.bind(("0.0.0.0", 8080))
web_server.listen()
while True:
conn, addr = web_server.accept()
http_request = conn.recv(8192)
print("Received request:\n", http_request.decode())
conn.send(b"HTTP/1.1 200 OK\r\nContent-Type: text/plain\r\n\r\nRequest received")
conn.close()
実行結果例:
GET / HTTP/1.1 Host: localhost:8080 Accept: text/html,application/xhtml+xml Accept-Language: ja-JP Connection: keep-alive
HTTPプロトコルの詳細
プロトコル概要
HTTPはクライアント-サーバー間の通信規格で、TCP/IP上で動作します。デフォルトポート80番を使用し、リクエスト-レスポンスモデルに基づきます。
HTTP動作フロー
- クライアントがサーバーにTCP接続を確立
- HTTPリクエストの送信(メソッド、URL、ヘッダを含む)
- サーバーがリソースを処理しHTTPレスポンスを生成
- 接続終了(Close)または維持(Keep-Alive)
- クライアントがレスポンス内容を解釈・表示
主要リクエストメソッド
- GET:リソース取得
- POST:データ送信
- PUT:リソース更新
- DELETE:リソース削除
- HEAD:ヘッダ情報のみ取得
HTTPステータスコード分類
- 1xx:情報処理中
- 2xx:成功応答
- 3xx:リダイレクト
- 4xx:クライアントエラー
- 5xx:サーバーエラー
URL構成要素
https://example.com:443/path/to/resource?param=value#section
- スキーム:https
- ホスト:example.com
- ポート:443
- パス:/path/to/resource
- クエリ:param=value
- フラグメント:section
HTTPとHTTPSの相違点
| 特性 | HTTP | HTTPS |
|---|---|---|
| 暗号化 | なし | TLS/SSL |
| ポート番号 | 80 | 443 |
| 証明書 | 不要 | 必須 |
| パフォーマンス | 高速 | オーバーヘッドあり |