web服务器为机器上监听了本地的IP和端口的一个进程,当有客户的请求进来时,它会响应客户的请求并返回相应的信息。客户端和服务端之间的通信基于HTTP协议,客户端可以是浏览器或者任何支持HTTP的应用。
用户在浏览器输入网址向web服务器发出一个请求,web服务器收到请求后返回Hello, world!给浏览器,用户就能在浏览器上看到文字。现在用Python实现这样一个简单的web服务器。代码如下:
# 导入 socket 模块
import socket
# 定义主机和端口号
HOST, PORT = '', 8888
# 创建一个 socket 对象,使用 IPv4 和 TCP 协议
listen_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 设置 socket 选项,允许地址重用
listen_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
# 绑定主机和端口号
listen_socket.bind((HOST, PORT))
# 开始监听连接,最多只能处理一个连接
listen_socket.listen(1)
# 输出服务器启动信息
print('Serving HTTP on port %s ...' % PORT)
# 进入无限循环,等待客户端连接
while True:
# 接受客户端连接请求,返回一个新的 socket 对象和客户端地址
client_connection, client_address = listen_socket.accept()
# 接收客户端发送的请求数据,最大接收数据量为 1024 字节
request = client_connection.recv(1024)
# 将请求数据解码成字符串,并输出到控制台
print(request.decode("utf-8"))
# 构造 HTTP 响应报文
http_response = """\
HTTP/1.1 200 OK
Hello, World!
"""
# 将响应报文编码成二进制数据,并发送给客户端
client_connection.sendall(http_response.encode("utf-8"))
# 关闭连接
client_connection.close()
监听本地的8888端口,收到客户端的请求后,在控制台打印出请求的头部和内容,并返回响应的头部和内容给客户端。
运行上面的代码会出现:http://localhost:8888/,这里的localhost等同于127.0.0.1,

下一步我们直接打开浏览器输入:

这时候控制台会提示下图信息:

这就是客户端请求的头部信息。
HTTP协议是TCP协议上层的协议,因此在实现HTTP交互之前,客户端和服务端先要创建TCP连接。创建TCP连接就要用到socket模块。创建TCP连接由客户端发起,为接受客户端的TCP连接请求,服务器端需要经历以下几步:
- 创建socket
- 调用bind绑定到指定的IP和端口
- 调用listen监听端口
- 调用accept接受客户端的请求
至此一个TCP连接创建完成,接下来就可以进行数据的收发。
好了,以上就是一个最简单的web服务器。
