8.6 HTTP协议—搭建返回固定页面数据的静态Web服务器
学习目标
-
能够写出组装固定页面数据的响应报文
1. 开发自己的静态Web服务器实现步骤
1)编写一个TCP服务端程序
2)获取浏览器发送的http请求报文数据
3)读取固定页面数据,把页面数据组装成HTTP响应报文数据发送给浏览器。
4)HTTP响应报文数据发送完成以后,关闭服务于客户端的套接字。
2. 静态Web服务器-返回固定页面数据的示例代码
import socket # 导入socket包 if __name__ == '__main__': # 步骤一: 编写一个TCP服务端程序 # 步骤1:建立服务端的套接字对象 tcp_server_socket = socket.socket(socket.AF_INET,socket.SOCK_STREAM) # 设置端口复用 tcp_server_socket.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,True) # 步骤2:绑定ip地址和端口号 tcp_server_socket.bind(("",8888)) # 步骤3:设置监听 tcp_server_socket.listen(128) while True: # 步骤二: 获取浏览器发送的http请求报文数据 # 步骤4:等待客户端连接 service_client_socket,ip_port = tcp_server_socket.accept() print("客户端的ip地址和端口号为:",ip_port) # 步骤5:接收客户端发送的数据 recv_data = service_client_socket.recv(1024) recv_data = recv_data.decode(encoding="utf-8") print("接收到客户端发送的信息:\n%s"%(recv_data)) # 步骤三:读取固定页面数据,把页面数据组装成HTTP响应报文发送给浏览器 with open("./static/index.html","rb") as f: file_data = f.read() # 应答行 response_line = "HTTP/1.1 200 OK\r\n" # 应答头 response_header = "Sever:pwd\r\n" # 应答体 response_body = file_data # 应答内容 response_data = (response_line+response_header+"\r\n").encode()+response_body # 发送数据 service_client_socket.send(response_data) # 步骤四:关闭客户端套接字 service_client_socket.close()
3. 小结
1)编写一个TCP服务端程序
tcp_server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 循环接受客户端的连接请求 while True: conn_socket, ip_port = tcp_server_socket.accept()
2)获取浏览器发送的http请求报文数据
client_request_data = conn_socket.recv(4096)
3)读取固定页面数据,把页面数据组装成HTTP响应报文数据发送给浏览器。
response_data = (response_line + response_header + "\r\n").encode("utf-8") + response_body conn_socket.send(response_data)
4)HTTP响应报文数据发送完成以后,关闭服务于客户端的套接字。
conn_socket.close()