我正在尝试编写个人的HTTP Server,并且需要帮助。
ServerSocket或Socket类可以在URL上调用并将其绑定(bind)到代码中的方法是什么。

例如,如果我在浏览器中编写以下链接<b>http://localhost:8080/coupon/add?name=coupon name</b>,则希望将此链接添加到我的代码中。

也许谁知道我该怎么做?

我的简单代码:

import java.io.IOException;

import java.net.ServerSocket;
import java.net.Socket;


public class HTTPServer {

    public static void main(String[] args) {

        new HTTPServer().startServer();
    }

    public void startServer() {
        try (ServerSocket serverSocket = new ServerSocket(8080)) {

            System.out.println("Server is started");
            while (true) {
                Socket socket = serverSocket.accept();

            }

        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

谢谢

最佳答案

您现在所做的所有代码都设置了一个TCP服务器。

HTTP是Layer 7协议(protocol)。

接受来自客户端的连接后,就可以将HTTP用于该TCP套接字上的通信。

您必须解析客户端发送的HTTP请求,并从中知道URL。

就您而言,您说:



您的浏览器将发送HTTP请求,如下例所示:

GET /coupon/add?name=coupon+name HTTP/1.0
Host: localhost:8080

实际上,那里会有更多的HTTP header ,以及尾随的\r\n,但就我们而言,让我们保持简单。

请注意,空格等特殊字符为URL-encoded,但是在查询字符串中空格也被编码为+,取决于客户端,它可以是+%20

希望您可以从此说明中很清楚地知道如何从此HTTP请求中获取URL。

实际完整链接中唯一缺少的部分是http://部分。 HTTP和HTTPS之间的区别不是HTTP协议(protocol)的一部分-它在套接字层之上,但在HTTP协议(protocol)层之下。如果您有SSL套接字,那么您将在服务器端知道这一点,并根据它是SSL套接字还是“普通”套接字来确定是http还是https

希望能有所帮助。

09-04 21:12
查看更多