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

Golang简易客户端报unexpected EOF错误,客户端或服务器何处出错?

解决Golang客户端请求Python简易服务器出现的"unexpected EOF"错误

问题出在你使用的Python简易HTTP服务器上,它的实现不符合HTTP协议规范,导致Golang客户端无法正确解析响应,触发unexpected EOF错误。

具体原因

HTTP协议要求响应必须包含以下结构:

  1. 状态行(如HTTP/1.1 200 OK)
  2. 响应头字段
  3. 头与体之间的空行
  4. 响应体(可选)

你用的Python服务器代码没有构造完整的符合规范的HTTP响应,Golang的net/http客户端在尝试读取响应数据时,因为没有收到预期的HTTP格式内容,提前遇到了连接关闭,从而抛出该错误。

修正后的Python服务器代码

import socket

def main():
    host = 'localhost'
    port = 8080

    server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
    server_socket.bind((host, port))
    server_socket.listen(1)

    print(f"Server listening on {host}:{port}")

    while True:
        client_socket, addr = server_socket.accept()
        print(f"Accepted connection from {addr}")
        
        # 读取客户端请求内容
        request = client_socket.recv(1024).decode('utf-8')
        print(f"Received request:\n{request}")

        # 构造标准HTTP响应
        response = (
            "HTTP/1.1 200 OK\r\n"
            "Content-Type: text/plain\r\n"
            "Content-Length: 17\r\n"
            "\r\n"
            "Health Check Passed"
        )

        # 发送完整响应并关闭连接
        client_socket.sendall(response.encode('utf-8'))
        client_socket.close()

if __name__ == "__main__":
    main()

关键修正点

  • 添加了标准的HTTP状态行,明确响应状态
  • 补充了Content-Type和Content-Length等必要响应头,让客户端知道如何处理响应体
  • 用\r\n\r\n分隔响应头和响应体,严格遵循HTTP协议格式要求
  • 确保响应内容完整发送,客户端可以正常解析

你的Golang客户端代码没有问题,使用上面修正后的Python服务器,重新运行后就能正常请求/health接口,不会再出现unexpected EOF错误。

内容的提问来源于stack exchange,提问作者pan-sultan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 17:50:29