HTTP #
HTTP (Hyper Text Transfer Protocol) は,Web サーバと Web クライアントの間でデータを送受信するためのプロトコル(決まりごと)です. 基本的には状態を持たず,1つのリクエストにつき,1つのレスポンスが返されるという特徴があります. リクエストとレスポンスの構造は次の通りです.


リクエストもレスポンスも,ヘッダとボディに分けられ,ヘッダとボディは空行で区切られます. リクエストのヘッダは,1行目にHTTPのメソッド,リソースのパス,HTTPのバージョンが記述されます. そして,2行目以降にリクエストヘッダが続きます.
レスポンスのヘッダは,1行目にHTTPのバージョン,ステータスコードが記述されます. そして,2行目以降にレスポンスヘッダが続きます. レスポンスのボディには,リクエストしたリソースのデータ(HTMLや画像など)が含まれます.
HTTP メソッド #
HTTP メソッドは,リクエストの目的を示すためのものです. リクエストの1行目に記述されるメソッドによって,リソースに対する操作が決まります. 代表的なメソッドは次の通りです.
GET
:リソースの取得POST
:リソースの作成PUT
:リソースの更新DELETE
:リソースの削除
ブラウザでHTMLページを表示するときは GET
メソッドが使われます.
<form>
を使ってデータを送信するときは POST
メソッドが使われることが多いです.
HTTP のステータスコード #
HTTP のステータスコードは,リクエストの結果を示すためのものです. ステータスコードは,3桁の数字で表され,次のような意味があります.
1xx
:情報100
:リクエストを受け付けた.
2xx
:成功200
:リクエストが成功した (OK)201
:リソースが作成された (Created)
3xx
:リダイレクト301
:リソースが移動した (Moved Permanently)
4xx
:クライアントエラー400
:不正なリクエストであった (Bad Request)404
:リソースが見つからない (Not Found)
5xx
:サーバエラー500
:サーバ内部エラー (Internal Server Error)
適切なステータスコードを返すことで,クライアントにリクエストの結果を伝えることができます.
HTTP リクエストの例 #
curl
コマンドは,コマンドラインから HTTP リクエストを送信するためのコマンドです.
-i
オプションを付けると,レスポンスヘッダが表示されるようになります.
example.com #
次の例は,curl
コマンドを使って,http://example.com
に GET
リクエストを送信する例(curl -i http://example.com
の実行結果)です.
HTTP/1.1 200 OK # ステータスコード.200 だから成功した.
Accept-Ranges: bytes # 以降レスポンスヘッダ.ヘッダの順序に意味はない.
Age: 510491
Cache-Control: max-age=604800
Content-Type: text/html; charset=UTF-8 # レスポンスボディがどのような形式で記載されているか.
Date: Sat, 02 Nov 2024 00:48:47 GMT # レスポンスが返された日時
Etag: "3147526947"
Expires: Sat, 09 Nov 2024 00:48:47 GMT
Last-Modified: Thu, 17 Oct 2019 07:18:26 GMT
Server: ECAcc (lac/558F)
Vary: Accept-Encoding
Content-Length: 1256 # レスポンスボディの長さ.
X-Cache: HIT # 続いて空行があるので,これでヘッダは終わり.
<!doctype html>
... 以降省略
google.co.jp #
次の例は,curl
コマンドを使って,https://google.co.jp
に GET
リクエストを送信する例(curl -v https://google.co.jp
の実行結果)です.
-v
オプション(verbose; 冗長な)を付けるとリクエストヘッダも表示されるようになります.
* Host google.co.jp:443 was resolved. # * から始まる行は,curl が出力する情報.
* IPv6: (none)
* IPv4: 142.251.42.163
# ... 途中省略
> GET / HTTP/2 # > から始まる行は,リクエストを表す.
> Host: google.co.jp
> User-Agent: curl/8.7.1
> Accept: */*
>
* Request completely sent off # < から始まる行は,レスポンスヘッダを表す.
< HTTP/2 301 # 301 は恒久的に移動したことを示すステータスコード.
< location: https://www.google.co.jp/ # 移動先のURL.ブラウザでアクセスした場合,ブラウザは,このURLに対して,もう一度リクエストを送る.
< content-type: text/html; charset=UTF-8
# ... 途中省略
< alt-svc: h3=":443"; ma=2592000,h3-29=":443"; ma=2592000
<
<HTML><HEAD><meta http-equiv="content-type" content="text/html;charset=utf-8">
<TITLE>301 Moved</TITLE></HEAD><BODY>
<H1>301 Moved</H1>
The document has moved
<A HREF="https://www.google.co.jp/">here</A>.
</BODY></HTML>
* Connection #0 to host google.co.jp left intact