Kaigai Blog living abroad in my twenties

【僕の学習ノート】HTTPとは?仕組みについて分かりやすく解説

Infotech Networking

こんにちは、なおやです。

今日は、Courseraというプラットフォームで、Metaの社員さんたちから授業を受けました。

そこで得た学びが、下記のツイートです。

今回は、これを掘り下げて解説していきます。

この記事の信憑性

この記事は、Courseの授業を受けて、学び、理解したことを基に、僕なりの言葉と解釈で分かりやすく解説しています。まあ簡単にいうと、僕が学んだことのアウトプットノートです。※ 注意:僕はまだ日々学習している段階です。解説していることに間違いがある可能性も否定できません。何か間違いを見つけて下さった方は、このWebサイトの向上のと僕の学習の為に、教えてください🙏
» Courseraという素晴らしいプラットフォームはこちら (授業は全て英語です)

【僕の学習ノート】HTTPとは?仕組みについて分かりやすく解説

【僕の学習ノート】HTTPとは?仕組みについて分かりやすく解説

この記事では、HTTPについて詳しく解説しました。

この記事の目次

HTTP (Hypertext Transfer Protocol) とは?

HTTP (Hypertext Transfer Protocol) とは?
  • 私たちがWebを閲覧する際に使用する通信プロトコル
  • Web (World Wide Web) というシステムの中で中枢を担う
  • WebブラウザがWebサーバーと通信する際に不可欠
  • Webリソースの転送に使用される

WebブラウザがWebサーバーと通信する際にHTTPが不可欠な理由

  1. 私たちは、Webブラウザを使ってWebサイトを閲覧する
  2. そのWebサイトのリソース (HTML文書、写真ファイル、スタイルシートなど) を保持しているWebサーバーから、そのリソースを送ってもらう必要がある
  3. そのWebサーバーに行うリクエストとWebサーバーから返ってくるリスポンスを行う際に、HTTPという通信方式が必要

HTTPS (Hypertext Transfer Protocol Secure) とは?

HTTPS (Hypertext Transfer Protocol Secure) とは?
実は私たちが今使っているのは、HTTPではありません。私たちは、HTTPの進化版であるHTTPSを使っています。では、この2つは何が違うのでしょうか?

HTTPS は HTTPに ”S” が加わっています。これは、”Secure” が加わった、つまりHTTPに安全性が加わったということを表しています。

HTTPに安全性が加わったとは?

例えば、オンラインで何かを買う際、クレジットカード情報を入力する必要があります。この場合、WebブラウザとWebサーバーの取引を誰かに盗み見られたらどうしますか?あなたのクレジットの情報がバレバレになってしまいます。

そこでこのHTTPSでは、この2つのコンピューター間でのやり取りを暗号化することで、例え情報が漏れても大丈夫なようにしています。

「2つのコンピューター間でのやり取りを暗号化する」とは?

  1. コンピューターAからコンピューターBに情報を送る場合
  2. コンピューターAから情報を送る前に情報をコンピューターBしか解読することが出来ないランダムなコードに変換する
  3. だから、情報のやり取りを第三者が見ても何がなんだかさっぱり
  4. 情報がコンピューター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) とは?

リクエストライン (Request Line) とは?
//リクエストライン
POST /home.html HTTP/1.1

リクエストラインとは上記の部分のことで、3つの部品から成り立っています。それぞれ、1つずつ解説します。

ちなみにこのリクエストラインは、「/home.html」に「HTTP/1.1」で「POST」したい!とWebサーバーにリクエストしていることを表しています。

リクエストメソッド (Request Method) とは?

Methodとは?
//リクエストライン
POST /home.html HTTP/1.1

このリクエストラインの中の、「POST」がリクエストメソッドに当たります。

リクエストメソッドでは、クライアントがWebサーバー上にあるリソースに対して行いたいアクションを示しています。

リクエストメソッド 内容
GET サーバーにあるリソース情報を取得したい
POST 新しいリソース情報をサーバーに加えたい
PUT サーバー上にあるリソース情報を変更したい
DELETE サーバー上にあるリソース情報を削除したい

リクエストメソッドの種類は、主に上記している4つです。

パス (Path) とは?

Pathとは?
//リクエストライン
POST /home.html HTTP/1.1

このリクエストラインの中の、「/home.html」がパスに当たります。

具体的に、欲しいWebページなどのリソースがWebサーバー上のどこにあるかを表しているのがパスです。

例えば、example.com/images/image.jpg というURLの場合、/images/image.jpgという部分がパスとなります。

簡単にいうと、「example.com」というWebサイトを管理しているWebサーバーの「images」というファイルにある「image.jpg」が欲しいよって感じ。

バージョン (Version) とは?

Versionとは?
//リクエストライン
POST /home.html HTTP/1.1

このリクエストラインの中の、「HTTP/1.1 」がバージョンに当たります。

これは、HTTPプロトコルのバージョンを示しており、よく使われるバージョンには主に2種類あります。それが「version 1.1」と「version 2.0」です。

リクエストヘッダ (Request Header) とは?

リクエストヘッダ (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) とは?

リクエストボディ (Requst Body) とは?
リクエストボディは、書いても書かなくてもどっちでもよく、リクエストメソッドでPOSTやPUTなどを使ってWebサーバーにデータを送る際によく使われます。

HTTPレスポンス (HTTP Response)とは?

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) とは?

ステータスライン (Status Line) とは?
//ステータスライン
HTTP/1.1 200 OK​

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

ステータスコード (Status Code) とは?

ステータスコード (Status Code) とは?
//ステータスライン
HTTP/1.1 200 OK​ 

このステータスラインの中の、「200 OK」がステータスコードに当たります。またステータスコードでは、HTTPリクエストが正常に処理されたかどうかを示しています。

ステータス番号 (Value) 100~599の間のどれかの番号が意味をもって使われる
ステータスメッセージ (Status message) ステータス番号をテキストで表したもの

詳しくは、この記事の後半で解説します。

レスポンスヘッダ (Response Header) とは?

レスポンスヘッダ (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) とは?

レスポンスボディ (Response Body) とは?
//レスポンスボディ
<html​>
​<head​><title​>Test</title​></head​>
  <body​>Web Page Example</body​>
</html>

レスポンスボディでは、要求されたWebページのHTML文書、写真、ビデオ、その他のメディアタイプなどが書かれています。

主にWebページのリソースをリクエストされた場合に書かれます。つまり、リクエストボディ同様、書かれない場合もあります。 (Optional)

ステータスコード (Status Code)

ステータスコード (Status Code)
Webを閲覧している最中に、「404 error」みたいなのが画面に出たりしたことはないですか?実はそれが、ステータスコードです。

先ほども解説した通り、ステータス番号は「100〜599まで」あり、それぞれの番号には意味があります。そして、「error」などのステータスメッセージととは、その番号の意味を言語化したものです。

情報レスポンス (Informational) とは?

情報レスポンス (Informational) とは?
情報レスポンスでは、クライアントからのリクエストが現在「処理中」であることを表しています。

ステータス番号 ステータスメッセージ 意味
100 Continue サーバーは、リクエストヘッダを受信したので、次はリクエストボディを送信するよう求めている。
101 Switching Protocols クライアントが行ったプロトコルの切り替え要請にサーバーも同意したことを表す。

成功レスポンス (Successful) とは?

成功レスポンス (Successful) とは?
成功レスポンスでは、クライアントからのリクエストがWebサーバ−によって正常に処理されたことを表しています。

ステータス番号 ステータスメッセージ 意味
200 OK リクエストが正常に処理されたことを示す。
201 Created リクエストが正常に処理され、新たにリソースが作られたことを示す。
202 Accepted サーバーは、リクエストを正常に受理したが、まだ処理は終わってないことを示す。
204 No Content リクエストは正常に処理されたが、返すコンテンツがないことを示す。

リダイレクション (Redirection) とは?

リダイレクション (Redirection) とは?
リダイレクションでは、リダイレクトが発生したことを表しています。

ステータス番号 ステータスメッセージ 意味
301 Moved Permanently リクエストされたリソースのURLが永遠に変更されたことを示す。レスポンスで新しいURLが与えられる。
302 Found このレスポンスコードは、リクエストされたリソースのURLが 一時的に 変更されたことを示す。

クライアントエラー (Client Error) とは?

クライアントエラー (Client Error) とは?
クライアントエラーでは、リクエストにWebサーバーが処理できない構文やコンテンツが含まれていることを表しています。

ステータス番号 ステータスメッセージ 意味
400 Bad Request クライアントエラーにより、サーバーはリクエストを処理できないことを示す。 (無効なリクエストや送信データが大きすぎるなどの場合)
401 Unauthorized リクエストを行なっているクライアントは認証されてない為、認証される必要があることを示す。
403 Forbidden リクエストは有効だが、サーバーが処理するのを拒否していることを示す。つまり、クライアントがアクセス権を所持していないことを示す。
404 Not Found サーバーがリクエストされたリソースが見つけられなかったことを示す。
405 Method Not Allowed Webサーバーが認可されていないリクエストメソッドでアクセスされ、拒否したことを示す。

サーバーエラー (Server Error) とは?

サーバーエラー (Server Error) とは?
サーバーエラーでは、HTTPリクエストを処理している最中にWebサーバー上でエラーが起こったことを表しています。

ステータス番号 ステータスメッセージ 意味
500 Internal Server Error リクエストを処理している最中にサーバー側で予期しないエラーが起こり、処理方法がわからない事態が発生したことで、リクエストを実行出来なかったことを示す。
502 Bad Gateway アプリケーションサーバーから無効なレスポンスを受けたことを示す。
503 Service Unavailable Webサーバーがリクエストを処理できないことを示す。(サーバーがメンテナンス中や高負荷でダウンしているなどの場合)

以上!