0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

HTTPの中身について

Posted at

HTTPのリクエストとレスポンスについてアウトプットします。

HTTPとは

HTTPとはウェブブラウザとウェブサーバー間で情報を送受信するためのプロトコル
OSI参照モデルのアプリケーション層に位置する。

HTTPの基本構造

HTTP通信はリクエストレスポンスの2つのフェーズで構成されています

リクエスト(Request)

クライアント(ブラウザやAPIクライアント)がサーバーに送信するデータ

リクエストの構造

リクエストは3つのパートで構成されます

  1. リクエストライン
  2. ヘッダー
  3. ボディ

1. リクエストライン

役割

クライアントがサーバーに「何をしたいのか」を伝えるための基本的な情報を提供

  • メソッド(例: GET, POST, PUT, DELETE)
  • URL(リソースのパス)
  • HTTPバージョン(例: HTTP/1.1)
GET /index.html HTTP/1.1

2. ヘッダー

役割

ヘッダーは、リクエストに関する追加情報や指示を提供する部分。リクエストを正しく処理するために必要なメタ情報を含む。

Host: www.example.com
User-Agent: Mozilla/5.0
Content-Type: application/json

3. ボディ

役割

リクエストの「実際のデータ」を含む部分。
特にPOSTやPUTリクエストで使用され、サーバーにデータを送信する際に必要

主に POST や PUT リクエストで送信されるデータ。
JSONやフォームデータなどが含まれます。
例:

{
  "username": "user1",
  "password": "pass123"
}

レスポンス(Response)

HTTPレスポンスは、サーバーがクライアント(ブラウザやAPIクライアント)からのリクエストに対して返すデータです。リクエストと同様に、レスポンスも以下の構造を持っています。

HTTPレスポンスの基本構造

HTTPレスポンスは以下の3つの部分で構成されています:

  1. ステータスライン
  2. ヘッダー
  3. ボディ

1. ステータスライン

ステータスラインには、レスポンスの基本的な情報が記載されています。以下の3つの要素で構成されます

  • HTTPバージョン
    例:HTTP/1.1、HTTP/2
  • ステータスコード
    レスポンスの結果を示す3桁の数値 (例:200,404など)
  • ステータスメッセージ
    ステータスコードに対応する説明(例:OK、Not Found)
HTTP/1.1 200 OK

2. ヘッダー

レスポンスに関する追加情報を含む部分です。「キー: 値」の形式で記載される。

役割

ヘッダーは、レスポンスに関するメタ情報(データの属性や通信条件など)を提供。
ヘッダーはボディの内容を補足し、クライアントに具体的な指示を伝える。

なぜ必要か

クライアントがボディを正しく解釈するための情報を提供する。

通信の効率性を高める
  1. ステータスラインやヘッダーを解析するだけで、処理の可否を判断
  2. データサイズをヘッダーなどで知らせることでメモリを効率よく確保できる
  3. Cache-Control ヘッダーを利用して、クライアントがリソースを再利用可能かどうかを判断
主なヘッダー例
    Content-Type: レスポンスのデータ形式を指定(例:text/html、application/json)
    Content-Length: レスポンスデータのサイズ(バイト単位)
    Date: レスポンスが送信された日時
    Set-Cookie: クライアントにクッキーを保存させる指示
    Cache-Control: キャッシュの制御方法を指定

例:

Content-Type: text/html
Content-Length: 348
Date: Tue, 05 Dec 2024 12:00:00 GMT

3. ボディ

役割

ボディは、レスポンスの実際のデータ(リソース)を提供する部分。
HTMLページ、画像、JSON形式のAPIレスポンスなど、クライアントが必要とするコンテンツがここに含まれる。

なぜ必要か

リクエストされたリソース(データやコンテンツ)をクライアントに送るため

ボディの例

index.html
<!DOCTYPE html>
<html>
<head><title>Example</title></head>
<body>
<h1>Hello, World!</h1>
</body>
</html>
example.json
{
  "username": "user1",
  "status": "active"
}

3つに分けている理由

責務の分離

ステータスラインは結果の要約を伝える。
ヘッダーは通信やデータ処理に必要な情報を提供。
ボディは実際のデータを送信。 各部分が異なる役割を担うことで、複雑な処理がシンプルになります。

柔軟性の向上

ヘッダーだけで重要な情報(ステータスコード、リソースの場所など)をクライアントに伝えることが可能。
必要に応じてボディを省略(例:204 No Content)できる。

効率性

ヘッダーを利用して、クライアントが事前にデータ形式やサイズを把握することで、無駄な処理を減らせる。

参考

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?