Skip to main content
 首页 » 编程设计

python之Python 中非常简单的 Web 服务

2025年05月04日32bluestorm

我正在尝试用 Python 实现一个服务器。当浏览器连接到端口号为 9999 的 localhost 时,它会打开该页面中带有 images.jpg 的文件 index.html,但无法显示图像。如何让 Web 服务器也处理图像?

到目前为止,这是我的代码:

from socket import * 
import os 
 
serversocket = socket(AF_INET, SOCK_STREAM) 
port = 5000 
host = '127.0.0.1' 
 
size = os.path.getsize("index.html") 
myfile = open('index.html', 'rb') 
mycontent = "Welcome to Very Simple Web Server" 
size = len(mycontent) 
header = "HTTP/1.0 200 OK \r\n Content_Length:" + str(size) + "\r\n\r\n" 
mycontent = myfile.read() 
serversocket.bind((host, port)) 
serversocket.listen(5) 
print('Server is listening on port 9999') 
 
while (1): 
    conn, addr = serversocket.accept() 
    print('Connected by', addr) 
    conn.send(bytes(header)) 
    conn.send(mycontent) 
    conn.close() 

请您参考如下方法:

您的代码创建了一个无限循环,它只会发送一个文件,并且永远不会接受其他连接。

为了显示图像,浏览器必须向图像的 URL 发送另一个请求,而您的代码未处理此请求。

为了让您的服务器正常工作,您需要:

  1. 开始循环
  2. 监听连接
  3. 解释传入请求的 header ,然后采取适当的行动。假设您只处理 GET 请求,而不处理 POST、HEAD、PUT 等其他请求。
  4. 查看请求的资源(URL)
  5. 在文件系统上找到资源(所以现在,你必须解析 URL)
  6. 将资源打包成 HTTP 响应(读取文件设置适当的 mime 类型)
  7. 使用适当的 header (服务器响应 header )将响应发送回客户端
  8. 重复

要显示带有一张图像的 HTML 页面,需要两个请求,一个用于 HTML 页面,另一个用于图像。如果 HTML 代码具有指向 CSS 文件的链接,那么现在您需要三个请求 - 一个用于 HTML 页面,一个用于 CSS 文件,最后一个用于图像。所有这些请求都需要成功完成,浏览器才能呈现页面。

您永远不需要手动执行此操作,使用 web development framework它将处理所有这些“无聊”的事情,这样您就可以解决实际问题。