72
81

More than 1 year has passed since last update.

HTTPリクエスト、HTTPレスポンスの具体的内容

Last updated at Posted at 2018-08-23

1.序(HTTPとは何か)

HTTPは、Hypertext Transfer Protocolの略称です。Hypertextという語は「複数の文書(テキスト)を相互に関連付け、結び付ける仕組み」のことで、今日ではありふれた概念となっています。(ウェブサイト上で公開されるほぼ全てのページは、aタグ等により実装された他ページとのリンクを有するため、Hypertextです。)

従って、HTTPは、「HypertextをTransfer(転送 = 送受信)する際のProtocol(取り決め)」を意味します。

下記に例示する通り、送受信される内容自体はただの文字列ですが、この取り決め(HTTP)に従ったフォーマットで通信が行われることで、送信側・受信側の間の通信が齟齬なく可能になります。

※URLの先頭に記述される「http://」は、プロトコルの宣言で、「Httpに則った通信を行う」ということを送信先に通達します。

2.HTTPリクエストの構成

HTTPリクエストは、以下の3つの要素で構成される。

  • リクエスト行
  • ヘッダーフィールド
  • ボディ

ヘッダーフィールド、ボディは省略可能。
ヘッダーフィールドとボディの間は、空行を1行挟む。

2-1.リクエスト行

メソッド、URI、HTTPバージョンの3つの要素から構成され、それぞれスペースで区切られる。

リクエスト行の例
POST /index.html HTTP/1.0

2-2.ヘッダーフィールド

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

ヘッダーフィールドの例
Accept: image/gif, image/jpeg, */*
Accept-Language: ja
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (Compatible; MSIE 6.0; Windows NT 5.1;)
Host: www.xxx.zzz
Connection: Keep-Alive

リクエストヘッダの種類については、下記参照
https://triple-underscore.github.io/RFC7231-ja.html#section-5

2-3.ボディ

主に、POST通信時のパラメータが記述される。

ボディ(POSTパラメータ)の例
hoge=piyo&yoshiki=xjapan

3.HTTPレスポンスの構成

HTTPレスポンスは、以下の3つの要素で構成される。

  • ステータス行
  • ヘッダーフィールド
  • ボディ

3-1.ステータス行

3桁の数字で構成され、リクエストの結果をクライアントに通知する。
大まかに、下記の通り分類される。
100番台「情報」
200番台「成功」
300番台「リダイレクト」
400番台「クライアントエラー」
500番台「サーバエラー」

詳細については下記参照
https://triple-underscore.github.io/RFC7231-ja.html#section-6

3-2.ヘッダーフィールド

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

詳細については下記参照
https://triple-underscore.github.io/RFC7231-ja.html#section-7

レスポンスヘッダの例
alt-svc: quic=":443"; ma=2592000; v="44,43,39,35"
cache-control: private, max-age=0
content-encoding: br
content-type: text/html; charset=UTF-8
date: Thu, 23 Aug 2018 15:37:28 GMT
expires: -1
server: gws
status: 200
x-frame-options: SAMEORIGIN
x-xss-protection: 1; mode=block

3-3.ボディ

リクエストに対する、サーバー応答内容の本文。
webサーバーへのリクエストに対するレスポンスの場合、HTML形式のテキストデータが記述される。

4.実際にレスポンスを見てみる

curlが一番簡単なので、下記コマンドでgoogle.co.jpにリクエストしてみよう。

curl -i google.co.jp

実行結果は、下記のようになる。
image.png

上記の結果を見ると、google.co.jp が www.google.co.jp にリダイレクトされていることがわかる。
(ステータスコードが301、ヘッダにLocationの記述がある)

curlで叩いた場合、単に返ってきたレスポンスが文字列として表示されるだけ。
実体としては文字列のやり取りが行われているだけ、ということがわかる。

ウェブブラウザは、これらの記述を「解釈」して、様々な動作を行っている。
「解釈」が可能なのは、HTTPによって通信内容と意味が定義されているためである。

5.参考

https://ja.wikipedia.org/wiki/Hypertext_Transfer_Protocol
https://qiita.com/shuntaro_tamura/items/ae55b99deb9e2a170754
https://ja.wikipedia.org/wiki/Hypertext_Transfer_Protocol
http://www.tohoho-web.com/ex/http.htm
https://qiita.com/yasuhiroki/items/a569d3371a66e365316f

72
81
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
72
81