💭

localhostって何?curlで叩いていた「行き先」を整理してみる

に公開

はじめに

  • 前回、curlを使ってGoサーバからレスポンスを確認しました。
  • でも localhost:8080 の正体は、正直よく分かっていませんでした。
  • 今回は、この「接続先」にフォーカスして記事を書いていこうと思います。

前回の記事はこちらになります。
https://zenn.dev/tyz8250/articles/5fc153e31f88d1


localhostって何?

では、いつものようにGPTに聞いてみましょう。

localhost は「今使っている自分のPC自身を指す特別な名前」。

……どういうこと?
とりあえず「自分のPC自身」ということを覚えればいいのか?

もう少し具体例を交えて考えていきます。

私たちは普段、Webサイトにアクセスするとき
https://example.com のように、どこか別のサーバにアクセスしています。

一方で、今回の接続はどうなっているでしょうか。

curl http://localhost:8080

http://localhost:8080 にアクセスする。
つまりこれは、

「自分のPCに向かって通信している」

ということになります。


:8080 って何?

ここで少し引っかかりました。
:8080 って何?覚えないとだめ?

GPTにも聞いてみました。

これは ポート番号 と呼ばれるものです。

ポート番号。なるほど。

正直、今の段階でポート番号を全部覚える必要はありません。
「通信の行き先を区別するための番号」だと分かっていればOKそうです。

同じPCの中で、
どのプログラムに通信を届けるかを
ポート番号で指定している、という理解になります。

だからPCの中で複数のプログラムが
同時に通信を待ち受けることができるんだなと整理できました。

ちなみに 8080 という数字自体に特別な意味はありません。
開発用のサーバでよく使われる、空いていることが多い番号というだけです。

※ 実際には、IPアドレスやTCPといった仕組みが裏側で動いていますが、
今回は「接続先をイメージする」ことに集中するため、ここでは触れません。

今回のGoサーバは、次のコードで待ち受けていました。

http.ListenAndServe(":8080", nil)

つまり、

「8080番のポートで待っています」

という状態になります。


curlで何が起きているか整理する

ここまでをまとめると、

  • localhost → 自分のPC
  • 8080 → Goサーバが待っているポート
  • curl → HTTPリクエストを送るクライアント

という関係になります。

curlを実行すると、

  1. curlが localhost:8080 にHTTPリクエストを送る
  2. OSが通信を仲介する
  3. Goサーバのプロセスがリクエストを受け取る
  4. レスポンスが返ってくる

という流れになっています。


まとめ

今回は、curlで叩いていた「行き先」である
localhost:8080 の正体を整理してみました。

  • localhost は「自分自身のPC」
  • ポート番号は「どのプログラムに届けるか」
  • 同じPC内でもHTTP通信は成立する

記事にすることで、
自分自身の理解も少しずつ深まってきているなと感じます。

それではまた!

Discussion