gpt4 book ai didi

Java HTTP Server GZIP 给出内容编码错误

转载 作者:行者123 更新时间:2023-12-01 05:32:58 24 4
gpt4 key购买 nike

我在一个方法中有这部分,它应该将页面和标题返回到网络浏览器。

tSend 是字符串的包装类,getSub 只是返回该类的另一个实例,即子组件。 tSend.get() 是页面的字符串,tSend.getSub().get() 是包含页面响应 header 的字符串。

但是,在 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 服务器中保持 Activity 状态。

代码:

  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");
}
}

最佳答案

我很困惑为什么你为与我感觉相同的任务调用 tSend.getSub().addln()tSend.getSub().println() .

如果您压缩内容,我认为您不应该发送 Content-Length: header - 在压缩完成之前您不会知道大小。

在将 gzip 编码器附加到内容之前,您将内容发送到 out.println() - 这是故意的吗?您还忘记了该行上的 CR \r ——这是故意的吗?

tSend.get() 是否会产生任何使调试此代码变得困难的副作用? tSend.getSub() 或调用它的任何方法是否有任何使调试复杂化的副作用?

关于Java HTTP Server GZIP 给出内容编码错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8675352/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com