HTTPとは?
HTTP(Hypertext Transfer Protocol)とは、サーバとブラウザの間で、情報をやりとりするためのプロトコル(通信ルール)
HTTPSとは?
HTTPS(Hypertext Transfer Protocol Secure)は、HTTPで通信を安全に行うための仕組み。
HTTPとSSL/TLSを組み合わせた通信の総称で、通信路を暗号化してクライアントとサーバ間でやりとりするデータを保護し、盗聴を防ぐ目的で利用されている。
HTTPとHTTPSの違いは通信が暗号化されていないか暗号化されているかの違いで、現在は基本的にHTTPSが使用されている。
HTTPメッセージとは?
HTTPメッセージは、サーバーとクライアントがデータを交換する手段。
クライアントが送信してサーバーにアクションを起こさせるリクエストと、サーバーの回答であるレスポンスの、2種類のメッセージがある。
HTTPメッセージの構造
HTTPメッセージは、スタートライン、ヘッダ、ボディで構成されています。
■スタートライン
スタートラインは、リクエストラインとステータスラインの2種類があります。
リクエストライン
リクエストメッセージの1行目をリクエストラインと呼び、メソッド、リクエストURI、プロトコルバージョンで構成されています。
ステータスライン
レスポンスメッセージの1行目をステータスラインと呼び、プロトコルバージョン、ステータスコード、テキストフレーズから構成されています。
※http2.0以降はプロトコルバージョン、ステータスコードの2つで構成されている
■ヘッダ
ヘッダにはメッセージのメタデータが記述されています。
1つのメッセージは複数のヘッダを持つことができ、「名前:値」というkey-valueのような構成をしています。
■ボディ
ボディには、そのメッセージを表す本質的な情報が入ります。
つまり、サーバー側に渡したいデータや、サーバー側から返却されるデータなどが入っています。
HTTPのステートレス性
HTTPはステートレスなプロトコルとして設計されている。
ステートレスとは?
システム(サーバー)が現在の状態を表すデータを保持しないこと。
同じ入力(リクエスト)に対する出力(レスポンス)は常に同じ。
■利点
クライアントからのリクエストに単純に答えるだけなので、クライアントが増えた場合はサーバーを増やすだけで良い。
■欠点
クライアント側から送信するデータが多くなる。
認証など、サーバーに負荷がかかる処理を繰り返す場合がある。
ステートフルとは?
システム(サーバー)が現在の状態を表すデータを保持していること。
同じ入力(リクエスト)でも、保持しているデータによって出力(レスポンス)が変わる。
■利点
以前の操作を保持・反映できるため、すべての操作をスムーズに完結させられることができる。
■欠点
データを保持する必要があるため、多数の人が共用するようなシステムでは負荷が重くなる。
どのサーバーでも同じ状態を保持させないといけないため、クライアントが増えた場合にスケールアウトさせにくい。
9つのHTTPメソッド
HTTPには、クライアントが行いたい処理をサーバに伝えるために9つのメソッドが定義されています。
この中でもよく使われるメソッドは、GET、POST、PUT、DELETEの4つで、CRUDという性質を満たすためのものです。
GET
指定したURIの情報を取得するメソッド。
最も利用頻度の高いメソッドで、Webページの取得や、画像、映像の取得などで使用される。
POST
3つの役割があるメソッド。
- 子リソースの作成
- リソースへのデータの追加
- 他のメソッドでは対応できない処理(何らかの理由で他のメソッドで対応できない処理をPOSTで行うことがある)
PUT
- リソースの更新(対象リソースの現在の表現全体を変更)
- リソースの作成
DELETE
リソースの削除に使用する。
HEAD
リソースのヘッダだけを取得するメソッド。
GETと似ているが、HEADのレスポンスにはボディが含まれない。
OPTIONS
対象リソースがサポートしているメソッドの一覧を返す。
TRACE
対象リソースへのパスに沿ってメッセージのループバックテストを実行する。
CONNECT
対象リソースで識別されるサーバーとの間にトンネルを確立させる。
PATCH
リソースを部分的に変更するために使用する。
ステータスコードについて
ステータスコードは、レスポンスの1行目に記述されている3桁の数値。リクエストに対する結果を示している。
分類と意味
1xx : 処理中
処理が継続していることを示す。
2xx : 成功
リクエストが成功したことを示す。
3xx : リダイレクト
他のリソースへのリダイレクトを示す。
4xx : クライアントエラー
クライアントのエラーを示す。原因はクライアントのリクエストにある。
5xx : サーバエラー
サーバエラーを示す。原因はサーバ側にある。
参考にさせていただいた書籍