HTTP(S)について簡単にまとめてみた

## HTTPを簡単に説明
- WEBサイトを表示する際に利用される約束事（プロトコル）のことである。
    - HTTP(Hypertext Transfer Protocol)である。
    - HTTPというサイトを表示する約束事がなされているおかげで今このページを閲覧できている。逆に、HTTPがなければインターネット上のWEBページは閲覧することができない。

## WEBページが表示される仕組み＆HTTPのおさらい
- WEBサイトを表示される仕組み(を理解するには、`ブラウザ`と`WEBサーバー`の2つを理解する必要がある。)
![スクリーンショット 2023-03-20 20.45.06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2915639/aee578ce-f5da-1012-0cc9-5fd73e868420.png)
    - `ブラウザ` 
        - Google ChromeやInternet ExplorerなどWEBサイトを閲覧するために必要なソフト。
        - 今現在、この記事の読者はいずれかのブラウザを使って閲覧している（はず）。

    - `WEBサーバー` 
        - WEBページのデータが保管されているコンピューターのこと。
        - ここにはHTMLファイルが保管されている。そのため、ブラウザに閲覧したいWEBサイトを表示させるには、ブラウザを通して、あなたが「〇〇ページを見たい」というリクエストをサーバーに`リクエスト`を送り、サーバーがあなたに`レスポンス`を返すことで、あなたのブラウザにWEBページが表示される。
 
![スクリーンショット 2023-03-20 20.56.08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2915639/8722f36b-687b-a4bd-c9c9-94c41c6a863e.png)
- HTTPのおさらい
    - 先ほどWEBページを表示させる際、サーバーにリクエストを送り、サーバーはレスポンスを返す、すなわち、WEBページに関する通信について記述したが、まさに、この通信方法を定めたものがHTTP（約束事）である。
        - どのブラウザでどのページを見ても正しく表示されるのは、全てこの機器がこのHTTPに沿った通信を行なっているため。
        - ブラウザとWEBサイトどちらか一方がHTTPのルールを無視したリクエスト・レスポンスをした場合、WEBページは正しく表示されることはない。


## HTTPリクエストの3つの要素
- ブラウザから「〇〇ページを見たい」とリクエストを送ることを`HTTPリクエスト`という。
    - HTTPリクエストには3つの要素が存在する。
    ![スクリーンショット 2023-03-20 21.10.57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2915639/04013c3d-74b5-8015-b1df-bb166afb27e8.png)

- `HTTPリクエスト：リクエスト行`
    - リクエスト行には`メソッド（WEBページへの命令）` `対象　WEBページ（URL）` `使用するHTTPプロトコルのバージョン情報`が含まれている。
    ![スクリーンショット 2023-03-20 21.17.45.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2915639/6ac95d3e-50bf-73b3-c30b-0cb8208343b1.png)

    - 例えば、メソッドは指定されたWEBページに対する処理の種類を表す。WEBページの情報を単純に閲覧したい場合は`GETメソッド`を使用する。また、WEBページに対してコメントの投稿などをする場合は`POSTメソッド`を使用する。
        - [こちらの参考URL](https://it-biz.online/it-skills/http/)を閲覧する際、以下のようなリクエスト行が生成される。
        ![スクリーンショット 2023-03-20 21.17.54.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2915639/7b682450-ae93-2a7a-c411-34b27a8a560f.png)
    - 代表的なリクエストメソッド
    ![スクリーンショット 2023-03-20 21.20.57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2915639/025481da-5ac4-1782-91af-574c804bec09.png)



- `HTTPリクエスト：ヘッダー`
    - リクエストヘッダー行には、WEBブラウザで受信可能なデータ形式や文字コード、言語、キャッシュに関する指示などの情報が含まれている。
    ![スクリーンショット 2023-03-20 21.25.04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2915639/d1340c0b-6b8e-4a86-dd12-a1e3982b41f0.png)

- `HTTPリクエスト：ボディー`
    - ボディーには主に`POSTメソッド`を利用した通信時のパラメーターが記載される。
        - 以下のような入力内容をWEBページに送る際のボディー
        ![スクリーンショット 2023-03-20 21.27.28.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2915639/536cb5bf-f834-d41f-eba6-1a96675d8777.png)
![スクリーンショット 2023-03-20 21.27.36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2915639/89d9eb1f-fe27-77b0-b485-034d6071e067.png)


## HTTPレスポンスの3つの要素
- ブラウザから送られてきたHTTPリクエストに対する返答を`HTTPレスポンス`と呼ぶ。
    - ここには、要求された実際のページが含まれる。
    - HTTPレスポンスにも3つの要素が存在する。
    ![スクリーンショット 2023-03-20 21.32.40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2915639/037af474-9690-d40c-7b05-55bc57e50586.png)


- `HTTPレスポンス：ステータス行`
    - ステータス行には`リクエストの結果`が含まれている。
    - 例えば、GETメソッドに対して正常にページ情報を出せる場合は、「200番台の成功」を返し、失敗した場合には、「500番台のサーバエラー」などを返す。※１００番台が見切れてしまったが、`成功も失敗もない状態`と文章が続く。
    ![スクリーンショット 2023-03-20 21.37.31.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2915639/bdeb5be3-e76e-12a3-0de6-137c4e0cd70d.png)

- `HTTPレスポンス：ヘッダー`
    - レスポンスヘッダー行には、サーバー情報やレスポンスするデータタイプなどの情報が含まれている。
    ![スクリーンショット 2023-03-20 21.42.08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2915639/adf4a776-1e33-ddc7-6767-8c41e29f957e.png)


- `HTTPレスポンス：ボディー`
    - ボディーには主にリクエストしたページがHTML形式で記載される。
        - ブラウザはこのHTMLを読み取り、画面上にわかりやすく表示する。すなわち、HTTPレスポンスのボディー行がWEBページの実データであると言える。
        ![スクリーンショット 2023-03-20 21.45.23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2915639/4015957f-e1ea-2b0c-7e46-97987f41ca1c.png)


## HTTPSとは
- WEBサイトを安全に表示するためプロトコルである。
    - HTTPとの違いは`通信内容が暗号化されるか否か`という点である。
    - 先ほど、説明したリクエストボディなどHTTPでは通信内容が平文で送信されるため、悪意のある第三者が情報を盗んだりできる。その悪用を防ぐために、HTTPSでHTTPの通信を暗号化し、仮に通信内容が外部に漏れてしまったとしても問題ないようにしている。
    ![スクリーンショット 2023-03-20 21.49.52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2915639/2265920e-8e9f-31d3-f868-ebd27048fd8d.png)
![スクリーンショット 2023-03-20 21.52.41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2915639/9434ecd4-104a-8f75-bee0-21825fd84843.png)


## おわりに
間違い等ございましたらコメント欄（POSTメソッド）にてご指摘ください。

## 参考記事
- [HTTPとは？HTTPSとは？初心者向けに分かりやすく３分で解説
](https://it-biz.online/it-skills/http/)

- [「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典イメージぴよ画像「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典：HTTPリクエスト
　](https://wa3.i-3-i.info/word1841.html)

- [「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典イメージぴよ画像「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典：HTTPレスポンス
　](https://wa3.i-3-i.info/word1842.html)