3

我无法弄清楚为什么我在 Dart 中收到此错误:

HttpException:HTTP 标头不可变

我有一个 HttpResponse 实例,我尝试向它添加一些标头:

response.outputStream.writeString(responseData);
response.headers.add('Content-Type', 'text/html');
response.outputStream.close();

如果不添加到标题中,我该怎么办?

4

1 回答 1

7

解决起来很简单,只需确保在输出任何内容之前添加标题:

response.headers.add('Content-Type', 'text/html'); // <-- this line first.
response.write(responseData);
response.close();

我所做的只是改变线条的顺序。

原因是,如果您开始输出正文,就不能再简单地修改标头(因为标头已经通过网络发送了!)。这就是 HTTP 的工作方式。首先是标题,然后是正文。

更多背景知识: 有时 HTTP 库(通常使用不同的编程语言)可能会缓冲输出数据并且不会立即刷新内容,从而导致即使在输出某些内容后您似乎也可以修改标头的情况。在你的情况下,这没有发生。输出似乎已经被刷新。

于 2013-01-30T20:18:59.033 回答