あめがえるのITブログ

頑張りすぎない。ほどほどに頑張るブログ。

HTTPプロトコルについて調べてみた

API Gateway+Lambdaサーバレス環境を構築するにあたりHTTPについて理解しておく必要があると感じたので調べてみた。

◆HTTPとは

HTTP(Hypertext Transfer Protocol):従来ではWebサーバとWebブラウザの間でWeb情報をやり取りするために考案されたプロトコル
現在では上記以外にも様々アプリケーションとサーバを接続するために利用される。

◆バージョン

リリース バージョン 概要
1990 HTTP/0.9 メソッドにGETのみを搭載。実際には0.9はなく、標準化される前の仕様として後からつけられた。
1996 HTTP/1.0 IETFによって標準化。GETの他にPOSTなどのメソッドが追加された
1997 HTTP/1.1 1.0が公表された翌年完了版の1.1が発行された
2015 HTTP/2 機能強化版
2018 HTTP/3 トランスポート層にQUICを採用

◆QUICとは

トランスポート層プロトコルの一つ。
従来、高速だが信頼性の低いUDPと信頼性が高いが接続確立時の遅延が大きいTCPいづれかが用いられてきた。
QUICではUDPをベースに高速伝送を実現する一方、TCPの服装制御や再送制御の要素を 取り込んで信頼性を高め、TLS相当の暗号化メカニズムを組み込み安全性も担保している。

◆HTTP仕組み

原則的に、クライアントがサーバへHTTPリクエストを送信し、サーバがクライアントへHTTPレスポンスを返す。

◆HTTPリクエス

下記3つの部品から構成されている。
1. HTTPリクエストライン(メソッド、リソース、HTTPバージョン) 2. HTTPリクエストヘッダ(接続元情報) 3. 空白(\rn) 4. HTTPリクエストメッセージボディ(任意)

◆HTTPリクエスト例

POST /search.html HTTP/1.1\r\n
Host: wa3.i-3-i.info\r\n
Connection: keep-alive\r\n
Content-Length: 38\r\n
Cache-Control: max-age=0\r\n
Origin: http://xxxxx.com\r\n
Upgrade-Insecure-Requests: 1\r\n
User-Agent: xxxxxx\r\n
Content-Type: application/x-www-form-urlencoded\r\n
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8\r\n
Referer: http://wa3.i-3-i.info/index.html\r\n
Accept-Encoding: gzip, deflate\r\n
Accept-Language: ja,en-US;q=0.8,en;q=0.6\r\n
\r\n
q=test&submitSearch=%E6%A4%9C%E7%B4%A2

◆メソッドとは

CRUDに対応したメソッドが用意されており、バックエンドの処理に対しメソッドを関連付けすることで視覚的にわかりやすくしている。

◆メソッド一覧(一部抜粋)

メソッド 概要
GET 指定したターゲットをサーバから取り出す。HTTP0.9で実装。
HEAD 指定したターゲットに関するヘッダー情報を取り出す。
POST 指定したターゲットにデータを送信する
PUT 作成、更新を行う。
DELETE 削除を行う。
CONNECT プロキシサーバ経由で通信を行う。

◆HTTPレスポンス ステータス(一部抜粋)

ステータスコード 概要 状態
1系 Informational 情報レスポンス 正常
100 Continue リクエスト継続可能 正常
2系 Success 成功レスポンス 正常
200 OK リクエストが成功しレスポンスが返答される 正常
3系 Redirection リダイレクション 正常
4系 Client Error クライアントエラー 異常
5系 Server Error サーバエラー 異常
500 Internal Server Error 何かしらサーバないで起きたエラー 異常