我正在尝试编写个人的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
。希望能有所帮助。