HTTPのリクエスト・レスポンス
はじめに
APIを設計するにあたって、HTTPリクエスト・レスポンスを調べる必要があったため、自分の整理のために記載しています。
誤りなどがありましたら指摘いただけると幸いです。
想定読者
自分
HTTPとは
HTTP(HyperText Transfer Protocol)は、インターネット上で情報をやり取りするためのプロトコル(通信規約)の一つ。
特に、WebブラウザとWebサーバ間での通信に使われる。
基本的な流れ
- ユーザーがURLをブラウザに入力しEnterを押す。
- ブラウザがHTTPリクエストをWebサーバに送信する。
- サーバがリクエストを処理し、HTTPレスポンスを返す。
- ブラウザがレスポンスを受け取り、結果を表示する。
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 | 情報の削除 |
そのほかにもいくつかのメソッドが存在するが詳しくは以下を参照。
主なリクエストヘッダの種類
ヘッダー | 値 |
---|---|
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 | サーバが一時的に停止している |
より細かいステータスコードは以下を参照
主なレスポンスヘッダの種類
ヘッダー | 値 |
---|---|
Date | 作成された日付 |
Location | 絶対URLで正確な情報の位置を通知 |
Server | サーバ・ソフトの名称やバージョンに関する情報 |
WWW-Authenticate | ユーザ認証用のデータを返す |
Set-Cookie | クライアントにクッキーを設定する |
Access-Control-Allow-Origin | コンテンツの表示を許可するオリジン |
Access-Control-Allow-Credentials | 値がtrueの場合、ブラウザはCookieを送信許可する。 |
参考
Discussion