我写了一个 Servlet,它应该像一个网络代理。但是当我加载页面时,一些 Javascript GET 调用仅返回部分原始内容,例如localhost:8080/Proxy?requestURL=example.com
.
将 java 脚本的内容打印到控制台时,它们是完整的。但是浏览器的响应被截断了。
我是这样写的:
ServletOutputStream sos = resp.getOutputStream();
OutputStreamWriter writer = new OutputStreamWriter(sos);
..
String str = content_of_get_request
..
writer.write(str);
writer.flush();
writer.close();
奇怪的是,当我直接请求页面请求期间加载的 Javascript 时,如下所示:
localhost:8080/Proxy?requestURL=anotherexaple.com/needed.js
整个内容返回给浏览器。
如果有人有想法,那就太好了。问候
更新:
问题是我创建响应字符串的方式:
while ((line = rd.readLine()) != null)
{
response.append(line);
}
我从 Stream 中读取了一行并将其附加到 StringBuffer 上,但似乎 firefox 和 chrome 对此有问题。似乎某些浏览器为 JavaScript 实现了最大行长,但是 RFC HTTP 1.1 标准中没有提到最大行长。
使固定:
只需在该行中添加“\n”即可解决问题。
response.append(line+"\n");