🤗

HTTPの理解を深める

2023/10/22に公開

はじめに

エンジニアとして働き始めて、ある程度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の基本的なことは記載できたと思うが、誤りや情報不足な箇所があるかもしれない。
今後も学習を続け、本記事を逐次更新していこうと思う。

参考サイト

https://www.itmanage.co.jp/column/about-http-https/
https://qiita.com/taki_21/items/49e2956b49083a472582
https://qiita.com/growsic/items/7b0b461303fd1e8995f2

Discussion