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 | 何かしらサーバないで起きたエラー | 異常 |