Netty で http サーバーを開発しています。場合によっては、サーバーが 1x1 の透明ピクセルに応答する必要があります。そこで、base64 で GIF 透明ピクセルをハードコーディングし、次のコードで返しました。
String pixel_string= new String (Base64.decodeBase64("R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw=="));
HttpResponse response = new DefaultHttpResponse(HttpVersion.HTTP_1_1, HttpResponseStatus.OK);
response.setContent(ChannelBuffers.copiedBuffer(pixel_string, CharsetUtil.UTF_8));
EDIT : content-type も設定します: response.setHeader(HttpHeaders.Names.CONTENT_TYPE, "image/gif"); Chrome では、すべて問題ありません。ただし、Firefox は、ピクセル データが無効であるため、ピクセルを表示できない (これは私のアプリにとってはかなり悪いことです) と言っています。多くの調査の後、文字セットをIso-8859-1に変更することで、最終的に修正を見つけました。
response.setContent(ChannelBuffers.copiedBuffer(
responseBuilder.pixel_string, CharsetUtil.ISO_8859_1));
なぜ動くのかわからないので、場合によってはトラブルに巻き込まれるのではないかと思います。Firefox の設定を (デフォルトで UTF8 にするために) 変更しようとしましたが、あまり変わりません。
Firefox が UTF-8 ではなく ISO-8859 エンコーディングを受け入れるのはなぜですか? それを変更できますか?誰かが問題の原因と、ユーザーの設定に関係なく機能することを確認する方法についての手がかりを持っていますか?
ありがとう