1
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

http://localhost:3000にアクセスすると「ERROR - The requested URL could not be retrieved」になる

Posted at

Web開発中に発生したエラーについて対応した方法を書く。

エラー内容

grunt-contrib-connectで簡易サーバー起動後、ブラウザからアクセスするとこんなエラー画面になりました。

ERROR
The requested URL could not be retrieved

While trying to retrieve the URL: http://localhost:3000/

The following error was encountered:

    Connection to 127.0.0.1 Failed 

The system returned:

    (111) Connection refused

The remote host or network may be down. Please try the request again.

Your cache administrator is root. 

要するに、http://localhost:3000/にアクセスしたところ127.0.0.1への接続が失敗し、システムがエラーコード(111)を返してきているよ、リモートホストかネットワークが落ちてるかもね。って話ですね。

原因究明

私の環境ですが、Windows7です。

リモートホストかネットワークが原因との事なので、まずはホストから。

今回はgruntで立ち上げているのでgruntのログを確認し、以下のメッセージが出てればOK。
確認するログはコンソールに出ているメッセージです。

Started connect web server on http://localhost:3000

次にネットワークの確認。
ネットワークでのトラブルシュートはまずはpingですね。

gruntとは別にコマンドプロンプトを立ち上げてpingを打ってみます。

$ ping localhost

************* [::1]に ping を送信しています 32 バイトのデータ:
::1 からの応答: 時間 <1ms
::1 からの応答: 時間 <1ms
::1 からの応答: 時間 <1ms
::1 からの応答: 時間 <1ms

::1 の ping 統計:
    パケット数: 送信 = 4、受信 = 4、損失 = 0 (0% の損失)、
ラウンド トリップの概算時間 (ミリ秒):
    最小 = 0ms、最大 = 0ms、平均 = 0ms

*************はホスト名です。隠してます。
pingの結果、応答はちゃんと返って来ているようですね。
さて、もう少し詳しく見てみます。ホスト名の横の[]に囲まれている箇所ですが、
名前解決後のIPアドレスが表示されています。

localhostは名前解決されると::1となるようです。あまり見慣れないアドレスですね。。。

「IPアドレスって数字4つをピリオドで繋いだものじゃないの?」なんて疑問を持つかもしれませんが、
普段良く見る192.168.0.2なんてアドレスはIPv4アドレスと呼ばれるものです。
それに対し今回の::1のようなものはIPv6アドレスと呼ばれるものです。

IPv6???って方はググッてください。

話を戻しますが、要はlocalhostは名前解決された結果IPv6アドレスとなり、
IPv6プロトコルとしてサーバーにアクセスしに行ったというわけです。

先頭のエラーメッセージを思い出すと、「127.0.0.1への接続が失敗し・・・」と言われていました。
つまり、「ブラウザとしてはIPv4アドレスとして名前解決して欲しかったけどシステムからIPv6が返ってきちゃった」というような感じです。
(ここのところ、細かい部分で気になる人いると思います。私も細かい部分が分かってないかもしれません。ご指摘歓迎です。)

対応策

localhostやLAN内の名前解決がうまくいっていないのであれば、まずはhostsファイルを確認してみるといいです。
hostファイルはC:\Windows\System32\drivers\etc\hostsにあります。

中を見ると以下のような記載が。

# localhost name resolution is handled within DNS itself.
	127.0.0.1       localhost
	::1             localhost

ありますね。IPv6アドレスとlocalhostを紐付けている行が。
::1 localhostの行頭に#を入力してこの行をコメントアウトします。

# localhost name resolution is handled within DNS itself.
	127.0.0.1       localhost
#	::1             localhost

そもそも記載がない場合は、127.0.0.1 localhostの行をコピー&ペーストしてください。

この記載もないのに!!って方は、IPv6プロトコルを無効にする方法があります。

コントロール パネル>ネットワークとインターネット>ネットワークと共有センター
と進むと、左側に「アダプター設定の変更」というメニューが出てくるはずなのでそこへ行きます。

すると接続一覧が出てくるので該当の接続のプロパティを開きます。
一覧の中の「インターネット プロトコル バージョン6(TCP/IPv6)」のチェックを外せば無効になります。

これでもう一度アクセスしてみると、無事にアクセス成功となるはずです。

hostsファイルに書き込むのは管理者権限がないと出来ないので気をつけてください。
また場合によって反映に再起動が必要かもしれません。

1
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?