HTTP 协议
HTTP(Hypertext Transfer Protocol)是一种用于传输超文本的协议,是互联网上应用最为广泛的一种网络协议。它是客户端和服务器之间进行数据传输的基础。HTTP协议运行在TCP/IP协议栈之上,它定义了客户端和服务器之间进行通信的规则。
HTTP协议使用请求-响应模型。客户端发送一个HTTP请求给服务器,服务器接收并处理这个请求,并返回一个HTTP响应给客户端。HTTP协议通常被用于Web浏览器和Web服务器之间的通信,但它也可以用于其他类型的客户端和服务器之间的通信。
使用 Socket(TCP/IP) 模拟 HTTP 的请求过程
使用Socket实现HTTP的示例:
import socket
HOST = '127.0.0.1' # 服务器IP地址
PORT = 8080 # 服务器端口号
def handle_request(client_socket):
request_data = client_socket.recv(1024) # 接收客户端请求数据
# 构造响应数据 (\r\n :在不同的操作系统中换行符可能不一致,所以采用\r\n的方式作为web中的换行符)
response_start_line = "HTTP/1.1 200 OK\r\n"
response_headers = "Content-Type: text/html; charset=utf-8\r\n"
response_body = "<h1>Hello, World!</h1>"
response = response_start_line + response_headers + "\r\n" + response_body
client_socket.sendall(response.encode()) # 发送响应数据给客户端
client_socket.close() # 关闭客户端连接
if __name__ == '__main__':
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 创建TCP套接字
server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) # 经过四次挥手后服务端套接字被关闭或服务器进程终止后,立即释放该端口,使其可立即被再次使用。这对于经常启动和关闭服务器进程的应用程序尤其有用,因为它可以避免"Address already in use"错误。
server_socket.bind((HOST, PORT)) # 绑定IP地址和端口号
server_socket.listen(5) # 监听客户端连接请求
print('HTTP Server is listening on {}:{}'.format(HOST, PORT))
while True:
client_socket, client_address = server_socket.accept() # 接受客户端连接请求
print('Received connection from {}:{}'.format(client_address[0], client_address[1]))
handle_request(client_socket) # 处理客户端请求并发送响应数据
#关闭服务端套接字
server_socket.close()
以上代码实现了一个简单的HTTP服务器,它监听在本地主机IP地址的8080端口上。当客户端连接到服务器并发送HTTP请求时,服务器将返回一个包含“Hello, World!”的HTML响应。