connection refused、timeout、404 は、どれも「つながらない」と感じる症状ですが、失敗している段階が違います。
一言でいうと
connection refused は入口で拒否、timeout は返事がない、404 はHTTPサーバーには届いたが対象がない状態です。
まず比較
| 表示 | 起きていること | 主に見る場所 |
|---|---|---|
connection refused | 接続先のポートで待ち受けていない、または拒否された | アプリ起動、ポート番号 |
timeout | 一定時間返事がない | 経路、ファイアウォール、サーバー負荷 |
404 Not Found | HTTPサーバーは応答したが、パスが見つからない | URL、ルーティング、ファイル配置 |
connection refused
connection refused は、指定したIPアドレスやホストには届いたが、指定ポートで受け付けるアプリがいない時によく出ます。
例:
curl http://localhost:3000
確認すること:
- 開発サーバーを起動しているか
- ポート番号が正しいか
localhostと別のホストを混同していないか- コンテナ内とホストOSのポート公開が合っているか
timeout
timeout は、一定時間待っても返事が来ない状態です。拒否されたというより、返事がない状態に近いです。
確認すること:
- ネットワーク経路があるか
- ファイアウォールで落とされていないか
- サーバーが重すぎないか
- DNSが別のIPを返していないか
- VPNやプロキシが影響していないか
connection refused より原因範囲が広くなりやすいです。
404 Not Found
404はHTTPステータスコードです。つまり、HTTPサーバーからレスポンスが返っています。
HTTP/1.1 404 Not Found
確認すること:
- URLのパスが正しいか
- ルーティング設定があるか
- 静的ファイルの配置先が正しいか
- APIのエンドポイント名が合っているか
- ベースパスや末尾スラッシュの扱いが合っているか
404は「通信できていない」ではなく、「通信できたうえで対象が見つからない」状態です。
切り分け順
| 順番 | 確認 | 例 |
|---|---|---|
| 1 | 名前解決 | nslookup example.com |
| 2 | 到達性 | ping example.com |
| 3 | HTTP応答 | curl -I https://example.com/path |
| 4 | ポート | curl -v http://localhost:3000 |
| 5 | アプリログ | 開発サーバーやWebサーバーのログ |
よくある誤解
| 誤解 | 実際 |
|---|---|
| 404はネットワーク障害 | HTTPサーバーには届いています |
| timeoutとrefusedは同じ | 拒否されたのか返事がないのかが違います |
| localhostで動けば外部でも動く | 待受アドレスやファイアウォールが関係します |
| ブラウザ表示だけで原因がわかる | DevToolsやcurlで層を分けて確認します |
まとめ
connection refused、timeout、404 は失敗している段階が違います。エラー文を「つながらない」でまとめず、ポートで拒否、経路で無応答、HTTP上の未発見に分けて確認します。