httpリクエスト・レスポンスの中身はhttpプロトコル によって定められている。
プロトコルによって相互の通信規約を定めることで、お互いのメッセージの内容を認識できるようになる。

HTTPリクエストのなかみ

HTTPリクエストは主に3つの要素で構成されている。
上から順に、HTTPリクエスト行(最初の一行)、HTTPヘッダー、(空白行をはさみ)HTTPボディがある。

HTTPリクエストは Developer Tool でも確認できるが、下記のようにcurl(カール)でも確認できる。
curl は c・url (see url)という意味。

Chrome での見た場合
$ curl -v https://example.com # GETリクエスト
$ curl -X POST -v https://example.com # POSTリクエスト

# 下部にはHTTPレスポンスが入っている

余談だが、Web API は、HTTPリクエストを使って、このHTTPメソッドを指定することで API を使えるものの総称であり、原始的だが基本となる APIの操作方法である。

HTTPリクエスト行

HTTPリクエスト行はHTTPメソッド、URI(URLあるいはパス)、HTTPバージョンの3つの要素から構成される。
1行で成立しており、それぞれは半角スペースで区切られている。

GET /example.com/index.html HTTP/1.1
POST /example.com/index.html HTTP/1.1

HTTPメソッドには、POST・GET・PUT・DELETEがあり、それぞれデータベースのCRUD(create、read、update、delete)と同じような意味合いがある。

HTTPヘッダー

ヘッダーの各要素は「フィールド名 : 内容」の形式で構成される。

Accept: image/gif, image/jpeg, */*
Accept-Language: ja
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.61 Safari/537.36
Host: isaxxx.com
Connection: Keep-Alive

具体的にはUser-Agent(ユーザーエージェント)、Referer(リファラ – どのページから発生したリクエストか)、Cookie(クッキー)、Accept・Accept-Language・Accept-Encoding・Accept-Charsetなどリクエスト側がどのような情報を受け取りたいかという情報などがある。
他の値は下記を参照。
https://triple-underscore.github.io/RFC7231-ja.html#section-5

HTTPボディ

メソッドがPOSTの場合、ここに内容が記載されている。

name=isaxxx&email=info@example.com

HTTPレスポンスのなかみ

HTTPレスポンスは主に3つの要素で構成されている。
上から順にHTTPステータス行、HTTPヘッダーフィールド、(空白行をはさみ)HTTPボディである。
HTTPレスポンスはDeveloper Tool でも確認できるが、リクエストと同様にcurl(カール)でも確認できる。

$ curl -i example.com

HTTPステータス行

HTTPバージョン、ステータスコード、ステータスコードの詳細が記載される。
1行で成立しており、それぞれは半角スペースで区切られている。

HTTP/1.1 200 OK

HTTPヘッダーフィールド

リクエスト同様、各要素は「フィールド名 : 内容」の形式で構成される。

Accept-Ranges: bytes
Age: 187425
Cache-Control: max-age=604800
Content-Type: text/html; charset=UTF-8
Date: Sat, 13 Jun 2020 17:40:17 GMT
Etag: "3147526947"
Expires: Sat, 20 Jun 2020 17:40:17 GMT
Last-Modified: Thu, 17 Oct 2019 07:18:26 GMT
Server: ECS (sjc/4E44)
Vary: Accept-Encoding
X-Cache: HIT
Content-Length: 1256

具体的には、Content-Type(データのなかみを示す)、Expires(再利用期限)、Last-Modified(データの最終更新日時)、Cache-Control・Pragma(キャッシュ制御)、Connection(接続状況 – keep-aliveで接続を持続するか、closeで毎回切断するか)、Location(リダイレクト先)などがある。
Authorizationヘッダは、特定のクライアントに対してのみリソースを公開したい場合に認証情報を送信するために用いるヘッダで、Web APIなどの認証に利用される。
他の値は下記を参照。
https://triple-underscore.github.io/RFC7231-ja.html#section-7

ちなみにHTMLのmeta[http-equiv]はHTTPヘッダーフィールドに情報を付加できる。

<meta http-equiv="Connection" content="keep-alive">

HTTPボディ

HTMLや画像本体などデータそのものがはいっている。