↓ メインコンテンツへスキップ
  1. 補講/
  2. 補講02講 Webアプリケーション(Docker)/

HTTP

HTTP
#

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

HTTP リクエストの構造(クリックで更新)
HTTP レスポンスの構造(クリックで更新)

リクエストもレスポンスも、ヘッダとボディに分けられ、ヘッダとボディは空行で区切られます。 リクエストのヘッダは、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