编写GET请求以返回HTTP/1.1而非HTTP/1.0的问题咨询
问题原因
你的问题确实是BaseHTTPRequestHandler的默认配置导致的,和客户端请求逻辑无关,你构造的HTTP/1.1请求已经符合规范。BaseHTTPRequestHandler默认的响应协议版本固定为HTTP/1.0,由类属性protocol_version控制,默认值为"HTTP/1.0",不会自动适配客户端发送的请求版本。
解决方法
在你继承BaseHTTPRequestHandler的自定义处理类中,手动修改protocol_version属性即可:
from http.server import BaseHTTPRequestHandler, HTTPServer class CustomRequestHandler(BaseHTTPRequestHandler): # 新增这行配置,指定响应使用HTTP/1.1协议 protocol_version = "HTTP/1.1" def do_GET(self): # 原有响应逻辑需要新增Content-Length头配置 resp_content = b"your response content" self.send_response(200) # HTTP/1.1要求必须指定Content-Length或者使用分块传输编码,否则客户端会持续等待响应结束 self.send_header("Content-Length", str(len(resp_content))) self.end_headers() self.wfile.write(resp_content)
额外注意事项
- 开启HTTP/1.1支持后,必须为每个响应显式设置
Content-Length头,或者配置Transfer-Encoding: chunked使用分块传输,否则客户端无法判断响应传输完成的节点,会出现挂起超时的问题。 - 你当前的客户端请求构造没有问题,已经携带了HTTP/1.1强制要求的Host字段,不需要调整客户端代码。
内容的提问来源于stack exchange,提问作者jennifer
相关产品推荐
相关产品推荐

