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 に答える