HTTPの理解を深める
はじめに
エンジニアとして働き始めて、ある程度HTTP通信について理解できてきたと思うが知識を整理したいと思うので知っていること学習したことをメモしていこうと思う。
HTTPとは
HTTPとは、クアイアントとサーバとの間での通信プロトコルのことである。
プロトコルとは、ルールのことを指しており、通信する際の決まり事を言う。
このプロトコルは複数種類が存在し、OSI参照モデルで各プロトコルを7つの層で分類している。
HTTPはアプリケーション層にあたる。
バージョン
HTTPにはバージョンがあり、現在では1.1や2.0で使用されることが多い。
HTTPSとの違い
HTTPには似たような名前でHTTPSが存在する。
具体的な違いは、通信が暗号化されているかどうかの違い。
暗号化プロトコルのSSLやその後継のTLSで暗号化した通信を行っている。
デジタル証明などを設定すればできる模様。
→この辺りは今後学習して実際に試してみたい。
URLでの例
HTTP;通信が暗号化されていない("http://google.com")
HTTPS:通信が暗号化されている("https://google.com")
最近ではHTTPSでの通信がスタンダードになってきており、GoogleのSEO対策でもHTTPSの重要性が高まっているそう。
HTTPのリクエスト/レスポンス
HTTPのリクエストを送る際は、以下の構造になっている。
スタートライン(リクエストとレスポンスで名称が異なる)
リクエスト:リクエストライン
- どのリソースに対してどんな操作をしたいのか記載されている
例:GET /test/ HTTP/2
GET・・・・・・URLのリソースに対する操作を表すHTTPメソッド(下記に詳細を記載)
/test/・・リソースの値
HTTP/2・・HTTPのバージョン
レスポンス:ステータスライン
例:HTTP/2 200 OK
HTTP/2・・・HTTPのバージョン
200・・・・・・・処理結果の番号(ステータスコード)
OK・・・・・・・・リーズンフレーズ(レスポンスの種類を表す文字列)
ヘッダ
クライアントやサーバが追加することができる情報のこと
認証情報や言語やキャッシュの時間などいろいろな情報を送りあることができる。
代表的なヘッダ
- User-Agent
- Referer
- Authorization
- Accept
- Content-Type
- Content-Length
- Content-Language
- Date
- Transfer-Encoding
- Authorization
- Cach-Control
ボディ
ヘッダとボディの間には空行がある。
ボディの形式は先述のContent-Typeにより様々であり、ボディがない場合もある。
HTTPメソッド
サーバに対してどんな操作を行いたいのかを表すもの。
種類としては、8つのみ存在する。
メソッド名 | 説明 |
---|---|
GET | リソースの情報取得 |
POST | リソースの新規作成 |
PUT | リソースの更新 |
PATCH | リソースの一部更新 |
DELETE | リソースの削除 |
HEAD | ヘッダ情報のみリクエスト |
OPTIONS | オプションの情報を取得するリクエスト |
TRACE | プロキシ通す際に使用 |
CONNECT | 接続経路の調査を行う際に使用 |
ステータスコード
各ステータスは以下の意味が存在する。
1**:処理中
2**:処理の成功
3**:他のリソースへのリダイレクト
4**:クライアントエラー
5**:サーバエラー
終わりに
HTTPの基本的なことは記載できたと思うが、誤りや情報不足な箇所があるかもしれない。
今後も学習を続け、本記事を逐次更新していこうと思う。
参考サイト
Discussion