传统的HTTP服务器的原理:
- 创建一个ServerSocket,监听并绑定一个端口
- 一系列客户端来请求这个端口
- 服务器使用Accept,获得一个来自客户端的Socket连接对象
- 启动一个新线程处理连接
- 读Socket,得到字节流
- 解码协议,得到Http请求对象
- 处理Http请求,得到一个结果,封装成一个HttpResponse对象
- 编码协议,将结果序列化字节流
- 写Socket,将字节流发给客户端
- 继续循环步骤3
HTTP服务器之所以称为HTTP服务器,是因为编码解码协议是HTTP协议,如果协议是Redis协议,那它就成了Redis服务器,如果协议是WebSocket,那它就成了WebSocket服务器,等等。
HTTP的协议:
-
请求
image.png
POST / HTTP1.1
Host:www.xxx.com
User-Agent:Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022)
Content-Type:application/x-www-form-urlencoded
Content-Length:40
Connection: Keep-Alive
name=xxx&age=18
2.响应
image.png
HTTP/1.1 200 OK
Date: Mon, 22 May 2015 07:09:11 GMT
Content-Type: text/html; charset=UTF-8
<html>
<head></head>
<body>
<***> </***>
</body>
</html>
写在最后:
协议上Post和Get没有差别,实际上有约定俗成的做法。