簡體   English   中英

為什么我無法通過瀏覽器連接到 localhost 上的 http 服務器?

[英]Why can't I connect to http server on localhost through a browser?

我寫了一個非常簡單的 Java http 服務器用於練習。 我用 cURL 測試它,一切似乎都正常,但是當我嘗試從瀏覽器發送請求時

http://localhost:6666/

服務器沒有響應。 我什至在服務器套接字接受連接時放置了一個標記 System.out.println(),當我嘗試通過瀏覽器訪問服務器時,該連接似乎沒有觸發。 這個你能幫我嗎。 謝謝 :)

編輯:部分代碼:

public class Server {

    private ServerSocket serverSocket;
    private Socket socket;
    public Server() {
        try {
            serverSocket = new ServerSocket(6666);
            while (true) {
                socket = serverSocket.accept();
                System.out.println("Whoop! Connection!");
                Request request = new Request(socket);
                request.run();
            }
        } catch (IOException e) {
            e.printStackTrace();
          }
    }
}

其中 Request 是一個擴展 Thread 以處理多個請求的類

(我假設您在瀏覽器中使用完全相同的 URL 並使用curl ...)

如果瀏覽器在與服務不同的主機上運行,​​則原因是localhost IP 地址(例如127.0.0.1 )不會路由到除發送它們的主機之外的任何其他主機。 (這就是“本地”的意思......)簡而言之,這是正常的行為。 (也許您正在不同的主機上運行curl和瀏覽器。)

如果瀏覽器與服務運行在同一台主機上,這種行為有點令人費解。 然而,有一些可能的解釋:

  • 您的瀏覽器中可能有一些奇怪的網絡代理設置。 例如,如果您將瀏覽器配置為將所有 http 請求(包括 127.0.0.1)發送到另一台機器上的 HTTP 代理,則當代理將請求中繼到真機時,它會轉到錯誤的地方。

  • localhost域名可能綁定了一些奇怪的IP地址; 例如,不是127.xxx IP 地址的東西。 (這是一件很奇怪的事情,但我聽說過一些被誤導的人這樣做。)

  • 127.0.0.1 IP 地址可能已綁定到環回網絡適配器以外的其他內容。 (我不知道這在技術上是否可行......)

  • 如果您使用 iptables 在虛擬網絡上實現路由,您可能會將 127.0.0.1 數據包發送到錯誤的地方。 (我不知道這在技術上是否可行......)

第一顆子彈在我看來最有可能。

出於安全原因,許多瀏覽器認為端口 6666 是不安全的。 請嘗試一些其他端口可能是端口 3000 或 5000(我只是在這里拋出一個數字)它應該可以工作。

瀏覽器只理解http和其他一些協議,比如ftp 您的serverSocket沒有實現任何協議。 如果你想看一些東西,也許你可以在控制台中嘗試

# telnet localhost 6666 

編輯

這是正確實現 HTTP 服務器的另一個問題(和答案): A Simple Http Server with Java/Socket?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM