Python 3 HTTP服务器将头部作为输出发送

1 投票
1 回答
1028 浏览
提问于 2025-04-18 04:27

在我的GitHub项目中,目前有一个问题是由Python 3.3.1引起的。我使用的Python内置HTTP服务器似乎把头信息当作普通输出发送了。当我自己测试的时候,一切正常,但在用户的电脑上却出现了问题。我无法重现这个问题,所以我在想,是不是Python 3.3.1本身有bug导致头信息出错,还是我自己的源代码有问题。

你可以在这里找到源代码。问题的截图可以在这里查看。

因为头信息没有正确发送,导致HTML等内容变得无效,浏览器无法正确显示HTML,因为它没有收到内容类型的头信息。

1 个回答

2

我刚刚找到了问题所在。看起来,Python 3.3.x 及之后的版本要求在发送第一个头信息之前,必须先发送状态码。否则,头信息就会被当作普通输出处理。所以我调整了一下顺序,现在就可以正常工作了。下面是一个例子:

不工作:

self.send_header('Content-type', 'text/html')
self.send_response(200)

工作:

self.send_response(200)
self.send_header('Content-type', 'text/html')

顺便提一下:Internet Explorer 并没有这个问题。不过,HTTP 的规范确实要求在头信息之前发送状态码。但早期的 Python 版本可以处理这个问题。这就是我第一次尝试时无法重现这个问题的原因。

撰写回答