You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python中如何为构造的HTTP数据包添加自定义响应头?

问题说明

你当前的代码直接向客户端发送图片二进制内容,没有遵循HTTP响应的标准格式,既无法正常添加自定义响应头,浏览器也无法正确识别返回的图片资源。

HTTP响应的标准结构如下:

  • 第一行是状态行,格式为HTTP/版本号 状态码 状态描述,正常返回资源时固定为HTTP/1.1 200 OK即可
  • 状态行后逐行排列响应头,格式为头字段名: 字段值,自定义头和Content-Type、Content-Length这类标准头都放在这个区域
  • 所有响应头写完后,必须加一个单独的空行(由\r\n组成),用来分隔响应头和响应体
  • 空行之后才是实际要返回的资源内容(也就是你读取的图片二进制数据)
修正后代码
import socket

# 读取目标图片二进制内容
img_file = open(r"C:\Users\hadad\Desktop\webroot\imgs\abstract.jpg", "rb")
img_content = img_file.read()
img_file.close()

server_socket = socket.socket()
server_socket.bind(("0.0.0.0", 80))
server_socket.listen()

while True:
    client_socket, client_addr = server_socket.accept()
    # 读取客户端请求,不需要解析内容直接返回响应即可
    client_socket.recv(1024)

    # 按HTTP规范构造响应头
    resp_headers = [
        "HTTP/1.1 200 OK",
        "Content-Type: image/jpeg",  # 声明返回内容类型为jpg图片
        f"Content-Length: {len(img_content)}",  # 声明响应体长度,避免浏览器加载异常
        "my header: some information",  # 自定义头直接按格式添加即可
        "Connection: close"  # 声明响应完成后关闭连接
    ]
    # 拼接响应头:头字段之间用\r\n分隔,末尾额外加\r\n形成分隔头和体的空行
    resp_header_bytes = ("\r\n".join(resp_headers) + "\r\n\r\n").encode("utf-8")
    # 拼接完整响应:响应头字节 + 图片二进制内容
    full_resp = resp_header_bytes + img_content

    client_socket.send(full_resp)
    client_socket.close()
注意事项
  • HTTP协议要求行分隔符必须是\r\n,不能只用\n,否则部分浏览器、抓包工具会将响应识别为非法格式
  • 运行代码后,既可以通过浏览器F12开发者工具的「网络」面板查看对应请求的响应头,也可以通过抓包工具看到你添加的自定义my header字段
  • 代码中加了循环逻辑,可以持续处理访问请求,不会处理一次请求后就自动退出

内容的提问来源于stack exchange,提问作者tomi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.03 08:54:21