恋愛で理解するHTTP通信

## はじめに
HTTP(ハイパーテキストトランスファープロトコル)について恋愛の告白で例えてみます。告白したことがある人もない人も青春に浸りながらHTTPを理解しましょう。

※本記事はHTTP通信の流れがイメージできることを目的としています。詳細なニュアンスや意味が本来と異なる場合があります。


## 登場人物
告白する人 - クライアント
告白される人 - サーバー

太郎くんと花子さんです
![スクリーンショット 2024-04-24 13.30.49.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1201315/cd93cc96-9c51-7309-48d7-900cff65f589.png)

## HTTP通信とは
HTTPとは告白する人(クライアント)と告白される人(サーバー)の間でデータの送受信を行うために用いられるプロトコルです。プロトコルとは簡単に言えば約束事、決まりのことです。

告白で例えるとプロトコルは言葉と言えます。日本語や英語などです。通信プロトコルは世界強共通(言語)なので世界中あらゆる場所で通信できるのです。

愛があれば言語(プロトコル)の壁を越えることもあるかもしれませんが通信の場合、その壁は越えられません。悪しからず。

## HTTPとHTTPS
まずはじめにHTTPとHTTPSの違いを紹介します。
HTTPとHTTPSの違いは告白においては告白する場所の違いと言えます。要は他人から覗けるか覗けないかの違いです。

### HTTP： 校舎裏
校舎裏では他の人にも聞かれる、覗かれて噂が広まる恐れがあります。個人的観測ですが校舎裏の告白は失敗する可能性が高いです。

![スクリーンショット 2024-04-24 13.26.36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1201315/39041cd6-301d-ac1d-e0ea-3dcc7125cd97.png)

実際の通信では情報が暗号化されずに送信されています。

### HTTPS： 観覧車のてっぺん
誰にも覗かれず想いを相手だけに伝えられる絶好の場所です。誰かがこの告白を盗み聞きしようとしても難しい状態です。

![スクリーンショット 2024-04-24 13.28.45.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1201315/a91b7932-d721-dc95-6e61-d75259f0246f.png)

HTTPSによる通信は暗号化されているため情報を盗み見ることは難しいです。


## 告白 : リクエスト
告白(リクエスト)にもいくつか種類があります。今回はよく使用される2つを紹介します。

### GETリクエスト： 想いを叫ぶタイプの告白
好きな人に「付き合ってください」という気持ちを叫ぶタイプの告白です。
クライアントは、自分の想い（リクエスト）をサーバーに送り、相手の反応（レスポンス）を待ちます。

```php
http://花子さん/告白/付き合ってください
```
![スクリーンショット 2024-04-24 13.35.15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1201315/3403a0ec-894c-74f7-76d7-cf75cc9caa82.png)

余談:　"花子さん"は実際はマイナンバー(IPアドレス)です。DNSの名前解決という仕組みで"花子さん"(ドメイン)でも告白(リクエスト)が行えています。

### POSTリクエスト： 手紙を添えて告白
告白で気持ちを伝えるのに加えて、手紙で詳細な想いを伝える方法です。POSTリクエストでは手紙(Body)を添えることができます。httpでは便箋1枚ですがhttpsでは封筒に入っているため安全です。

![スクリーンショット 2024-04-24 13.36.19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1201315/3aaab73f-eb24-b5e4-746d-3b7bb84f964b.png)


```php
https://太郎さん/告白/付き合ってください

body: {"love":10, "why":"優しいところ", "description":"..."}
```

## 返答 : レスポンス
ドキドキです！

### ステータスコード
レスポンスにはステータスコードというレスポンスの結果を示すコードが返ってきます。
メジャーなコードを紹介していきます。

**100番台: 情報**
・100 告白続行 (Continue) あまりないケースかもしれませんが告白を続けさせます。

**200番台: 成功**
・200 告白成功 (OK) 告白が成功しました。「まずはありがとう」という返答だと思ってください。
![スクリーンショット 2024-04-25 13.35.09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1201315/ece9dd48-58d7-1a44-1826-a59c46e1eced.png)
・204 告白成功 (No Content) 告白は成功したけど返答はない状態です。辛いです。

**300番台: 名前が変わりました等 (リダイレクト)**
・300 どっちでもいけるよ (Multiple Choices) パートナーがいてもいける雰囲気出してる悪いやつです。
![スクリーンショット 2024-04-25 13.10.52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1201315/6499b67d-7911-d49d-417f-d80a53b6dfdc.png)

・301 苗字が変わりました (Moved Permanently) 新しいURLに移動したというコードです。夫婦別姓が叫ばれる時代に言語化が難しいコードでした。

**400番台: 告白する側に問題 (クライアントエラー)**
・400 告白失敗 (Bad Request) ちょっと何いってるか分からない
・403 告白拒否　(Forbidden) 拒否されました。ストーカー、接近禁止命令が出されているかもしれません。
![スクリーンショット 2024-04-25 13.09.26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1201315/e01d605a-e799-32b6-3f48-bef75123851d.png)

・404 告白失敗 (Not Found) 告白される側には「付き合ってください」の辞書がないみたいです。

**500番台: 告白される側に問題 (サーバーエラー)**
・500 告白を受け止められない (Internal Server Error) 告白を受け止められないこともあります。
・503 今は忙しい (Service Unavailable) 告白される側にも多忙なことがあります。

![スクリーンショット 2024-04-25 13.34.08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1201315/61e68ab5-ac17-9fba-8283-f9f35fae713a.png)

常に告白(リクエスト)に成功するのが当たり前じゃないんです。受け取めてもらえただけありがたいんです。

### 返答の詳細 : レスポンスの中身
告白(リクエスト)に対する、告白される側(サーバー)の応答内容の本文です。ステータスコードは告白に対しての反応です。告白される側の想い(body)を受け取ります。


```php
// 例1
{
  "message": "僕もあなたのことが好きです！付き合ってください！"
}

// 例2
{
  "message": "まずはありがとう。 まだお互いをよく知らないから友達からはじめましょう。"
}

// 例3
{
  "message": "ごめんなさい。好きな人がいるの..."
}
```
青春ですね。


## まとめ
新しいこと、知らないことを理解する時はイメージできることが大切だと思っています。この記事がそんなイメージの一助になれば幸いです。

我ながら良い例えができたと思います。この概念は恋愛では「xxx だよ！」といった提案お待ちしております。

## 最後に
私の働いている会社で経験の有無を問わず採用を行っています。
興味のある方は是非カジュアル面談から応募してみてください！

https://jambo-support.com/recruit_engineer/