Web 服务器中缺少 http 标头

Ser*_*sen 6 python http nginx

我使用 BaseHTTPRequestHandler http 服务器并从互联网复制/粘贴代码。这是设置响应/标头的部分

class S(BaseHTTPRequestHandler):    
    def _set_response(self):
        self.send_response(200)
        self.send_header('Content-type', 'text/html')
        self.end_headers()
Run Code Online (Sandbox Code Playgroud)

但是当使用curl调用服务器时,响应是:

curl: (1) 不允许时收到HTTP/0.9

通过浏览器调用时:

ERR_INVALID_HTTP_RESPONSE

协议版本是 http/1.0

通过nginx反向代理调用Web服务器,这只是

   location / {
       proxy_http_version 1.1;
       proxy_pass  http://${NODE_NAME}:9000/;
   }
Run Code Online (Sandbox Code Playgroud)

为此还需要更多标头吗?我们如何在 BaseHTTPRequestHandler 或 nginx 中设置正确的 http 标头?

Prz*_*cki 2

我不熟悉 BaseHTTPRequestHandler 但我会尝试帮助处理curl 响应,因为几天前我遇到了非常类似的问题。

您是否尝试在http标志设置为0.9的情况下运行curl?

curl 'http://your-domain.com' --http0.9
Run Code Online (Sandbox Code Playgroud)

也许您的服务器确实使用 HTTP/0.9 进行响应。从curl 7.66.0开始,默认情况下禁用HTTP/0.9,因此这可能是“不允许时接收到HTTP/0.9”响应的原因。