🦍

HTTPのリクエスト・レスポンス

に公開

はじめに

APIを設計するにあたって、HTTPリクエスト・レスポンスを調べる必要があったため、自分の整理のために記載しています。
誤りなどがありましたら指摘いただけると幸いです。

想定読者

自分

HTTPとは

HTTP(HyperText Transfer Protocol)は、インターネット上で情報をやり取りするためのプロトコル(通信規約)の一つ。
特に、WebブラウザとWebサーバ間での通信に使われる。

基本的な流れ

  1. ユーザーがURLをブラウザに入力しEnterを押す。
  2. ブラウザがHTTPリクエストをWebサーバに送信する。
  3. サーバがリクエストを処理し、HTTPレスポンスを返す。
  4. ブラウザがレスポンスを受け取り、結果を表示する。

HTTPリクエストとレスポンス

Webブラウザなどを利用し、Webサーバに情報を送信したり、サーバから情報を受け取る際にHTTPおよびHTTPSが使用される。
HTTP通信は、クライアントからサーバへ1つ送信をし、それに対してサーバがレスポンスを1つ返信する形式で実行されている。

HTTPリクエストのデータ構造

HTTPリクエストのデータは大きく「リクエストライン」「リクエストヘッダ」「リクエストボディ」で構成されている。

  • リクエストライン

例:PUT /articles/111 HTTP/1.1

リクエストの概要を表す。サーバに対してどのような処理を依頼するかの情報が含まれている。
「HTTPメソッド」「URLパス」「HTTPバージョン」が記述されている。
例は「/articles/111」のパスで特定されるリソースに対して、PUT(更新)を行うリクエストということがわかる。

  • リクエストヘッダ

例:
Host: shopping.example.com
Content-Type: application/json

リクエストの補足的な情報を表す。「ヘッダ名:値」の形式になる。
例ではHostとContent-Typeヘッダを記述している。リクエストの送信先のホスト名と、リクエストボディのデータ形式が指定されている。

  • リクエストボディ

例:
{
“id”: 15,
“title”: “HTTPリクエスト/レスポンスの概要”,
“content”: “HTTPとは………………”
}

サーバが処理を行うために必要なデータを記述する。
ヘッダのContent-Typeで指定された形式のデータが格納されている。
例では更新する投稿データを記述している。リクエストボディは空の場合もある。

リクエストメソッドの種類

代表的なメソッドは以下の4つ。

メソッド 説明
GET 情報の取り出し
POST 情報の書き込み
PUT 情報の更新(全て)
DELETE 情報の削除

そのほかにもいくつかのメソッドが存在するが詳しくは以下を参照。

https://developer.mozilla.org/ja/docs/Web/HTTP/Methods

主なリクエストヘッダの種類

ヘッダー
Accept クライアントが受け入れ可能なメディアタイプ
Accept-Language クライアントが受け入れ可能な言語
Authorization HTTP認証Token
Cache-Control キャッシュ動作の指定
Content-Type リクエストボディのメディアタイプ
Cookie クライアントのCookie情報
Host リクエスト先のサーバのホスト名を指定
Origin CORSアクセスのオリジン
Range 取得する範囲
Referer 前のWebページのアドレス
User-Agent クライアント(ブラウザやアプリ)の情報

HTTPレスポンスのデータ構造

HTTPレスポンスのデータ構造は、「ステータスライン」「レスポンスヘッダ」「レスポンスボディ」で構成されている。

  • ステータスライン

例:
HTTP/1.1 200 OK

レスポンスの結果を表す。「HTTPのバージョン」「ステータスコード」「ステータステキスト」が記述されている。
ステータステキストはステータスコードごとに決まっている。

  • レスポンスヘッダ

例:
Content-Type: application/json
Date: Tue, 16 Jan 2024 13:45:50 GMT

レスポンスの補足的な情報を表す。情報の種類に応じて様々な名前のヘッダが存在する。
リクエストヘッダど同様「ヘッダ名:値」の形式になる。

  • レスポンスボディ

例:
{
“id”: 15,
“title”: “HTTPリクエスト/レスポンスの概要”,
“content”: “HTTPとは………………”,
“updatedAt”: “2025-01-16T11:46:20.920413”
}

クライアントが要求したデータを記述する。

主なステータスコード

コード 説明
200 OK リクエストの成功
201 Created リクエストが成功し、新しいリソースが作られた
204 No Content リクエストは成功し、作成されたコンテンツはなし
300 Multiple Choices 複数のリソースが存在する
301 Moved Permanently リソースは恒久的に移動した
302 Found リクエストしたリソースは一時的に移動している
400 Bad Request リクエストが正しくない
401 Unauthorized 認証が必要
403 Forbidden アクセスが禁止されている
409 Conflict リソースが矛盾している
500 Internal Server Error サーバ側でエラーが発生
503 Service Unavaliable サーバが一時的に停止している

より細かいステータスコードは以下を参照

https://developer.mozilla.org/ja/docs/Web/HTTP/Status

主なレスポンスヘッダの種類

ヘッダー
Date 作成された日付
Location 絶対URLで正確な情報の位置を通知
Server サーバ・ソフトの名称やバージョンに関する情報
WWW-Authenticate ユーザ認証用のデータを返す
Set-Cookie クライアントにクッキーを設定する
Access-Control-Allow-Origin コンテンツの表示を許可するオリジン
Access-Control-Allow-Credentials 値がtrueの場合、ブラウザはCookieを送信許可する。

参考

https://qiita.com/minateru/items/8693538bbd0768855266

https://www.itmanage.co.jp/column/http-www-request-response-statuscode/

Discussion