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

Firefox出现连接重置错误:Python Socket服务端发完数据即关闭连接异常

问题原因分析
  • 不符合HTTP协议规范:浏览器作为HTTP客户端,向服务端发送的是标准HTTP请求报文,要求服务端返回符合RFC规范的HTTP响应。你当前代码直接将请求原文回传给浏览器,浏览器无法识别为合法响应,会认为连接异常。
  • TCP连接关闭逻辑错误:你在调用sendall()后直接关闭连接,此时如果浏览器还有未发送完成的请求数据、或者内核中存在未确认的TCP报文,系统内核会直接返回RST包中断连接,而不是走正常的四次挥手流程,这就是Firefox提示「连接被重置」的直接原因。
修复方案

需要做两处调整:

  1. 构造合法的HTTP响应报文,将你要回显的内容放到响应体中
  2. 调整连接关闭逻辑,发送完数据后先关闭写端,等待客户端主动断开,避免发送RST包
修复后代码
#!/usr/bin/env python3
import socket

HOST = 'localhost'  # loopback interface address 
PORT = 3000         # non-privileged ports are > 1023

with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
    s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) # 增加端口复用配置,避免重启时端口占用
    s.bind((HOST, PORT))
    s.listen()
    while True:
        conn, addr = s.accept()
        with conn:
            print('Connected by', addr)
            data = conn.recv(1024).decode()
            print(data)
            # 构造符合规范的HTTP响应
            resp_body = data.encode()
            resp_header = [
                b'HTTP/1.1 200 OK',
                b'Content-Type: text/plain;charset=utf-8',
                f'Content-Length: {len(resp_body)}'.encode(),
                b'Connection: close',
                b'', b'' # 空行分隔响应头和响应体
            ]
            full_resp = b'\r\n'.join(resp_header) + resp_body
            conn.sendall(full_resp)
            # 先关闭写端通知客户端数据发送完成
            conn.shutdown(socket.SHUT_WR)
            # 读取客户端剩余传输内容,避免触发RST错误
            while True:
                leftover = conn.recv(1024)
                if not leftover:
                    break

修复后访问服务即可看到浏览器正常展示收到的HTTP请求全文,不会再触发连接重置错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 05:27:01