java - html 的 HTTP gzip 编码

标签 java html http gzip encode

对于我的一个项目,我必须编写自己的精简版网络服务器。 目前它正在做我想做的事情,但是有点......慢。至少对我来说慢一点。 因此我正在考虑实现 gzip 压缩来加快速度。 方法如下。

public static String encodeToGZip(String data) {
        ByteArrayOutputStream bout = null;
        try {
            bout = new ByteArrayOutputStream();
            GZIPOutputStream output = new GZIPOutputStream(bout);
            output.write(data.getBytes());
            output.flush();
            output.close();
            bout.close();
        } catch (IOException ex) {
            ex.printStackTrace();
        }

        try {
            return new String(bout.toByteArray(), "UTF-8");
        } catch (UnsupportedEncodingException ex) {
            return null;
        }
    }

问题是网络服务器无法解码我发送的数据。尽管它声明它接受 gzip 编码,所以我必须发送一些损坏的数据。

这就是结果。 wireshark嗅探==> GET/login.html HTTP/1.1

主机:本地主机:9090

连接:保持 Activity 状态

缓存控制:无缓存

编译指示:无缓存

用户代理:Mozilla/5.0(Macintosh;Intel Mac OS X 10_7_3)AppleWebKit/535.11(KHTML,如 Gecko)Chrome/17.0.963.79 Safari/535.11

接受:text/html,application/xhtml+xml,application/xml;q=0.9,/;q=0.8

接受编码:gzip、deflate、sdch

接受语言:en-US,en;q=0.8

接受字符集:ISO-8859-1,utf-8;q=0.7,*;q=0.3

<小时/>

HTTP/1.1 200 正常

连接:关闭

服务器:My Lite Server v0

内容编码:gzip

内容类型:text/html

............T...N...0....#.......O...?...$.. ……BB……g……6……[……u……6………… …………g6e…………S……c……$……`我 Gw............AOAhU...XO...d...].... IU...h...+......[.... .Y.........b...|x.........rm1.........1.....L...uI... ......S...n......F......T2.[$X.......M.....M。 #*.........d....58HL:....Wx......Z....m...t.. .Z.)'XQdg ......X......~......(......<.......p/....... …………”……6|7……3 ...r.Sv.../...rT...".........SrJ.........M.vR^...4$。 .. .q...x.................../...8...........M...y#... j......7........d..le......;.................~......的......

最佳答案

return new String(bout.toByteArray(), "UTF-8");

方法中的这一行将产生垃圾字符串。

上面的构造函数执行从给定编码到 UTF-16 的转码操作。您获取一堆任意字节并尝试将它们解码为 UTF-8。您只能将 UTF-8 编码的字符数据解码为 UTF-8。 Java没有二进制安全的字符串(所有字符串都是UTF-16);您必须使用字节数组。

只需将压缩字节写入您的OutputStream

避免使用 data.getBytes(),因为它使用默认的系统编码。这将产生不可移植的代码,因为默认系统编码取决于系统和配置。永远喜欢setting an encoding explicitly .

关于java - html 的 HTTP gzip 编码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9814164/

相关文章:

html - 网页主区 : div height issue

php - 如何使用 PHP 获取原始 POST 数据并保存到文件中?

javascript - 发出 HTTP 请求的 Javascript 函数的性能

java - 如何在graphstream中使用静态布局

Java GUI 不会显示

java - 有人可以解释一下此Java代码有什么问题吗?

java - Hibernate:获取按 id ASC 排序的最后 N 行

php - 使用 PHP 按列搜索 CSV?

html - 如何将长空格推到预包装 html 中的下一行

Java Web 服务 - 解析响应文本的框架