問題
Node.JS を介して不明な長さのリソースを提供しています。このため、Content-Length
ヘッダーを設定できません。HTTP 1.1 の場合、この性質のリソースにはチャンク エンコーディングを使用する必要があります。Node.JS はこれを認識しており、次のヘッダーを使用して、独自のチャンク転送エンコーディングでデータを送信します。
HTTP/1.1 200 OK
Transfer-Encoding: chunked
Connection: close
...
これはすべて問題なく、行儀の良いクライアントに適しています。 ただし、動作があまり良くないクライアント (つまり、Android 2.2 以前) をサポートする必要があります。 これらのクライアントは、チャンク転送エンコーディングを適切にサポートしていません。
修正試行 #1
私の最初の考えは、エンコーディングをnone
次のように設定することでした:
response.writeHead(200, {'Transfer-Encoding': 'none'});
これにより、Node.JS の自動チャンク エンコーディングが無効になり、ほとんどのクライアントとの互換性が維持されます。しかし、Android 2.3 以降のクライアントは、このような偽の転送エンコード ヘッダーが表示されると咳をして窒息するだけなので、壊れてしまいました。
試行番号 2 を修正 (助けが必要な場合)
でリクエストを行うとHTTP/1.0
、サーバーはチャンクエンコーディングなしで適切にレスポンスを返します:
HTTP/1.1 200 OK
Connection: close
...
これで問題は解決し、面倒なすべてのクライアントに対して機能するストリームを提供できるようになりました。の偽のヘッダーを送信する必要はありTransfer-Encoding
ません。また、コンテンツの長さを指定する必要もありません。
Node.JS の HTTP サーバーが常に HTTP/1.0 モードでサービスを提供するように強制するにはどうすればよいですか?