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

HTTPリクエストのなかみ

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

HTTPリクエスト行

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

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

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レスポンスは下記のように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(リダイレクト先)などがある。
他の値は下記を参照。
https://triple-underscore.github.io/RFC7231-ja.html#section-7

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

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

HTTPボディ

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