【僕の学習ノート】HTTPとは?仕組みについて分かりやすく解説
こんにちは、なおやです。
今日は、Courseraというプラットフォームで、Metaの社員さんたちから授業を受けました。
そこで得た学びが、下記のツイートです。
【#今日学んだ】HTTPとは何かについて
1. WebブラウザとWebサーバーの通信を行う際に使われるプロトコル
2. HTTPSでは、両者の通信は暗号化されている
3. HTTPリクエストとHTTPレスポンスによって両者間の通信が行われている— Naoya (@kaigaiblog63) October 5, 2022
今回は、これを掘り下げて解説していきます。
この記事の信憑性
この記事は、Courseの授業を受けて、学び、理解したことを基に、僕なりの言葉と解釈で分かりやすく解説しています。まあ簡単にいうと、僕が学んだことのアウトプットノートです。※ 注意:僕はまだ日々学習している段階です。解説していることに間違いがある可能性も否定できません。何か間違いを見つけて下さった方は、このWebサイトの向上のと僕の学習の為に、教えてください🙏
» Courseraという素晴らしいプラットフォームはこちら (授業は全て英語です)
【僕の学習ノート】HTTPとは?仕組みについて分かりやすく解説

この記事では、HTTPについて詳しく解説しました。
この記事の目次
- 1. HTTP (Hypertext Transfer Protocol) とは?
- 2. HTTPS (Hypertext Transfer Protocol Secure) とは?
- 3. HTTPリクエスト (HTTP Request) とは?
- 4. HTTPレスポンス (HTTP Response) とは?
- 5. ステータスコード (Status Code)
HTTP (Hypertext Transfer Protocol) とは?

- 私たちがWebを閲覧する際に使用する通信プロトコル
- Web (World Wide Web) というシステムの中で中枢を担う
- WebブラウザがWebサーバーと通信する際に不可欠
- Webリソースの転送に使用される
WebブラウザがWebサーバーと通信する際にHTTPが不可欠な理由
- 私たちは、Webブラウザを使ってWebサイトを閲覧する
- そのWebサイトのリソース (HTML文書、写真ファイル、スタイルシートなど) を保持しているWebサーバーから、そのリソースを送ってもらう必要がある
- そのWebサーバーに行うリクエストとWebサーバーから返ってくるリスポンスを行う際に、HTTPという通信方式が必要
HTTPS (Hypertext Transfer Protocol Secure) とは?
実は私たちが今使っているのは、HTTPではありません。私たちは、HTTPの進化版であるHTTPSを使っています。では、この2つは何が違うのでしょうか?
HTTPS は HTTPに ”S” が加わっています。これは、”Secure” が加わった、つまりHTTPに安全性が加わったということを表しています。
HTTPに安全性が加わったとは?
例えば、オンラインで何かを買う際、クレジットカード情報を入力する必要があります。この場合、WebブラウザとWebサーバーの取引を誰かに盗み見られたらどうしますか?あなたのクレジットの情報がバレバレになってしまいます。
そこでこのHTTPSでは、この2つのコンピューター間でのやり取りを暗号化することで、例え情報が漏れても大丈夫なようにしています。
「2つのコンピューター間でのやり取りを暗号化する」とは?
- コンピューターAからコンピューターBに情報を送る場合
- コンピューターAから情報を送る前に情報をコンピューターBしか解読することが出来ないランダムなコードに変換する
- だから、情報のやり取りを第三者が見ても何がなんだかさっぱり
- 情報がコンピューターBに到着すると、ランダムなコードが解読されて元の情報に戻る
ちなみに、Webブラウザのアドレスバーにあるロックアイコン (🔒) は、HTTPSを使っているという印です。
HTTPリクエスト (HTTP Request) とは?

HTTPリクエストとは、WebブラウザやクライアントからWebサーバーに対して行うリクエストのことで、3つの部品から成り立っています。
//リクエストライン
POST /home.html HTTP/1.1
//リクエストヘッダ
Host: example.com
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:50.0) Gecko/20100101 Firefox/50.0
Accept: */*
Accept-Language: en
Content-type: text/json
//リクエストボディ
{
"key1":"value1",
"key2":"value2",
"array1":["value3","value4"]
}
HTTPリクエストは、全体でこーゆー感じです。なんとなくのイメージは湧くと思います。それでは、1つずつ解説していきます。
リクエストライン (Request Line) とは?

//リクエストライン
POST /home.html HTTP/1.1
リクエストラインとは上記の部分のことで、3つの部品から成り立っています。それぞれ、1つずつ解説します。
リクエストメソッド (Request Method) とは?

//リクエストライン
POST /home.html HTTP/1.1
このリクエストラインの中の、「POST」がリクエストメソッドに当たります。
リクエストメソッドでは、クライアントがWebサーバー上にあるリソースに対して行いたいアクションを示しています。
リクエストメソッド | 内容 |
GET | サーバーにあるリソース情報を取得したい |
POST | 新しいリソース情報をサーバーに加えたい |
PUT | サーバー上にあるリソース情報を変更したい |
DELETE | サーバー上にあるリソース情報を削除したい |
リクエストメソッドの種類は、主に上記している4つです。
パス (Path) とは?

//リクエストライン
POST /home.html HTTP/1.1
このリクエストラインの中の、「/home.html」がパスに当たります。
具体的に、欲しいWebページなどのリソースがWebサーバー上のどこにあるかを表しているのがパスです。
例えば、example.com/images/image.jpg というURLの場合、/images/image.jpgという部分がパスとなります。
バージョン (Version) とは?

//リクエストライン
POST /home.html HTTP/1.1
このリクエストラインの中の、「HTTP/1.1 」がバージョンに当たります。
これは、HTTPプロトコルのバージョンを示しており、よく使われるバージョンには主に2種類あります。それが「version 1.1」と「version 2.0」です。
リクエストヘッダ (Request Header) とは?

//リクエストヘッダ
Host: example.com
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:50.0) Gecko/20100101 Firefox/50.0
Accept: */*
Accept-Language: en
Content-type: text/json
リクエストヘッダでは、リクエストに関する追加情報とリクエストを行なっているクライアントの情報を表しており、上記のように書かれます。
Host | WebブラウザからリクエストされているWebサイトのホスト名が書かれている (サーバーがどこにあるか) |
User-Agent | WebブラウザからリクエストしているユーザーのOS、バージョン、使っているソフト名などが書かれている (ユーザーがどんなソフトや機械を使ってリクエストしているのかを表す) |
Accept | Webサーバーに対してレスポンス方式を制限するために、クライアントが理解できるコンテンツのタイプを前もって伝えている |
Accept-Language | クライアントが好んでいる言語やロケールの情報などが記されている |
Content-type | Request Bodyで送信するデータの種類や形式などを相手方に伝達したもの |
また、それぞれの意味はこんな感じです。
リクエストボディ (Requst Body) とは?
リクエストボディは、書いても書かなくてもどっちでもよく、リクエストメソッドでPOSTやPUTなどを使ってWebサーバーにデータを送る際によく使われます。
HTTPレスポンス (HTTP Response)とは?

HTTPレスポンスとは、WebサーバーからWebブラウザやクライアントに対して、リクエストされたリソースをレスポンスすることを言います。また、3つの部品から構成されています。
//ステータスライン
HTTP/1.1 200 OK
//レスポンスヘッダ
Date: Fri, 11 Feb 2022 15:00:00 GMT+2
Server: Apache/2.2.14 (Linux)
Content-Length: 84
Content-Type: text/html
//レスポンスボディ
<html>
<head><title>Test</title></head>
<body>Web Page Example</body>
</html>
HTTPレスポンスは、全体でこーゆー感じです。HTTPリクエストになんとなく似ていますよね。それでは、1つずつ解説していきます。
ステータスライン (Status Line) とは?

//ステータスライン
HTTP/1.1 200 OK
リクエストラインとは上記の部分のことで、2つの部品から成り立っています。ちなみにバージョンとは、先ほど解説したHTTPプロトコルのバージョンのことです。
ステータスコード (Status Code) とは?

//ステータスライン
HTTP/1.1 200 OK
このステータスラインの中の、「200 OK」がステータスコードに当たります。またステータスコードでは、HTTPリクエストが正常に処理されたかどうかを示しています。
ステータス番号 (Value) | 100~599の間のどれかの番号が意味をもって使われる |
ステータスメッセージ (Status message) | ステータス番号をテキストで表したもの |
詳しくは、この記事の後半で解説します。
レスポンスヘッダ (Response Header) とは?

//レスポンスヘッダ
Date: Fri, 11 Feb 2022 15:00:00 GMT+2
Server: Apache/2.2.14 (Linux)
Content-Length: 84
Content-Type: text/html
レスポンスヘッダ では、レスポンスに関する追加情報とレスポンスを行なっているクライアントの情報を表しており、上記のように書かれます。
Date | HTTPレスポンスが行われた日時が書かれている |
Server | レスポンスを行ったWebサーバーのソフトウェアが何か書かれている |
Content-length | レスポンスの長さを表している |
Content-type | レスポンスするWebリソースのメディアタイプを表している (HTML文書、写真、動画など) |
また、それぞれの意味はこんな感じです。
レスポンスボディ (Response Body) とは?

//レスポンスボディ
<html>
<head><title>Test</title></head>
<body>Web Page Example</body>
</html>
レスポンスボディでは、要求されたWebページのHTML文書、写真、ビデオ、その他のメディアタイプなどが書かれています。
主にWebページのリソースをリクエストされた場合に書かれます。つまり、リクエストボディ同様、書かれない場合もあります。 (Optional)
ステータスコード (Status Code)
Webを閲覧している最中に、「404 error」みたいなのが画面に出たりしたことはないですか?実はそれが、ステータスコードです。
先ほども解説した通り、ステータス番号は「100〜599まで」あり、それぞれの番号には意味があります。そして、「error」などのステータスメッセージととは、その番号の意味を言語化したものです。
100~199 | 情報レスポンス (Informational) |
200~299 | 成功レスポンス (Successful) |
300~399 | リダイレクション (Redirection) |
400~499 | クライアントエラー (Client Error) |
500~599 | サーバーエラー (Server Error) |
情報レスポンス (Informational) とは?
情報レスポンスでは、クライアントからのリクエストが現在「処理中」であることを表しています。
ステータス番号 | ステータスメッセージ | 意味 |
100 | Continue | サーバーは、リクエストヘッダを受信したので、次はリクエストボディを送信するよう求めている。 |
101 | Switching Protocols | クライアントが行ったプロトコルの切り替え要請にサーバーも同意したことを表す。 |
成功レスポンス (Successful) とは?
成功レスポンスでは、クライアントからのリクエストがWebサーバ−によって正常に処理されたことを表しています。
ステータス番号 | ステータスメッセージ | 意味 |
200 | OK | リクエストが正常に処理されたことを示す。 |
201 | Created | リクエストが正常に処理され、新たにリソースが作られたことを示す。 |
202 | Accepted | サーバーは、リクエストを正常に受理したが、まだ処理は終わってないことを示す。 |
204 | No Content | リクエストは正常に処理されたが、返すコンテンツがないことを示す。 |
リダイレクション (Redirection) とは?
リダイレクションでは、リダイレクトが発生したことを表しています。
ステータス番号 | ステータスメッセージ | 意味 |
301 | Moved Permanently | リクエストされたリソースのURLが永遠に変更されたことを示す。レスポンスで新しいURLが与えられる。 |
302 | Found | このレスポンスコードは、リクエストされたリソースのURLが 一時的に 変更されたことを示す。 |
クライアントエラー (Client Error) とは?
クライアントエラーでは、リクエストにWebサーバーが処理できない構文やコンテンツが含まれていることを表しています。
ステータス番号 | ステータスメッセージ | 意味 |
400 | Bad Request | クライアントエラーにより、サーバーはリクエストを処理できないことを示す。 (無効なリクエストや送信データが大きすぎるなどの場合) |
401 | Unauthorized | リクエストを行なっているクライアントは認証されてない為、認証される必要があることを示す。 |
403 | Forbidden | リクエストは有効だが、サーバーが処理するのを拒否していることを示す。つまり、クライアントがアクセス権を所持していないことを示す。 |
404 | Not Found | サーバーがリクエストされたリソースが見つけられなかったことを示す。 |
405 | Method Not Allowed | Webサーバーが認可されていないリクエストメソッドでアクセスされ、拒否したことを示す。 |
サーバーエラー (Server Error) とは?
サーバーエラーでは、HTTPリクエストを処理している最中にWebサーバー上でエラーが起こったことを表しています。
ステータス番号 | ステータスメッセージ | 意味 |
500 | Internal Server Error | リクエストを処理している最中にサーバー側で予期しないエラーが起こり、処理方法がわからない事態が発生したことで、リクエストを実行出来なかったことを示す。 |
502 | Bad Gateway | アプリケーションサーバーから無効なレスポンスを受けたことを示す。 |
503 | Service Unavailable | Webサーバーがリクエストを処理できないことを示す。(サーバーがメンテナンス中や高負荷でダウンしているなどの場合) |
以上!