Java HTTP Server GZIP выдает ошибку кодирования контента - PullRequest
1 голос
/ 30 декабря 2011

У меня есть эта часть в методе, она должна вернуть страницу и заголовки в веб-браузер.

tSend - это класс-оболочка для строки, getSub просто возвращает другой экземпляр класса, подкомпонент. tSend.get() - это строка страницы, tSend.getSub().get() - строка, содержащая заголовки ответа для страницы.

Однако в Firefox выдается ошибка кодирования контента

Код:

{
    tSend.getSub().println("Content-Length: " + tSend.get().length() + "\r");
    if (gzip) {
        tSend.getSub().println("Content-Encoding: gzip\r");
    }
    tSend.getSub().println("\r");
    if (mom.DEBUG)
        System.out.println("Sending to client");
    out.println(tSend.getSub().get());
    if (gzip) {
        byte[]bytes = tSend.get().getBytes();
        GZIPOutputStream outGZIP = new GZIPOutputStream(out);
        outGZIP.write(bytes, 0, bytes.length);
        outGZIP.finish();
    } else
        out.println(tSend.get());
}

Я изменил класс для tSend, также я только что включил класс для него. Класс предназначен только для буферизации ответа, чтобы я мог использовать длину содержимого, чтобы позволить мне поддерживать активность на моем http-сервере.

Код:

  public static class ToSend
  {
     private String string = "";
     private ToSend sub;
     public void setSub(ToSend nextLevel)
     {
        sub = nextLevel;
     }
     public ToSend getSub()
     {
        return sub;
     }
     public String get()
     {
        return string;
     }
     public void set(String s)
     {
        string = s;
     }
     public void print(String s)
     {
        string = string + s;
     }
     public void println(String s)
     {
        print(s + "\n");
     }
  }

1 Ответ

0 голосов
/ 30 декабря 2011

Я смущен, почему вы звоните tSend.getSub().addln() и tSend.getSub().println() для задач, которые кажутся мне идентичными.

Я не думаю, что вам следует отправлять заголовок Content-Length:, если вы сжимаете содержимое -- вы не узнаете размер, пока не закончите сжатие.

Вы отправляете контент на out.println() до того, как подключите к нему кодировщик gzip - это намеренно?Вы также забыли CR \r в этой строке - это преднамеренно?

Создает ли tSend.get() какие-либо побочные эффекты, которые затрудняют отладку этого кода?tSend.getSub() или какие-либо методы, вызываемые на it , имеют побочные эффекты, которые усложняют отладку?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...