我的开发机器上的服务器版本如下:
Apache / 2.2.21(Win32)mod_fcgid / 2.3.6
我一直在测试HttpURLConnection
因为我的项目需要简单的流媒体功能。我已经阅读了@BalusC关于如何使用该课程的精彩概要。
Using java.net.URLConnection to fire and handle HTTP requests
我目前遇到的麻烦是设置setChunkedStreamingMode
时。无论我将其设置为,我的流似乎都没有进入服务器当我的服务器api方法/连接被调用/制作时,数据流是空的。但是,如果我删除它,它可以正常工作。
我见过另一个有类似问题的人:
Java/Android HttpURLConnection setChunkedStreamingMode not working with all PHP servers
但没有真正的解决方案。我无法将其设置为setFixedLengthStreamingMode
,因为内容(json)的长度可变。
这不行。我可能会传输非常大量的数据,因此无法将数据存储在内存中。
我的问题是,如何才能让setChunkedStreamingMode发挥得更好?它是服务器设置问题还是可以在代码中修复?
修改 我现在已经在我的生产服务器上测试了我的代码,它没有问题。但是,我仍然想知道为什么我本地计算机上的Apache服务器出现故障。任何帮助仍然非常感谢。
答案 0 :(得分:1)
尝试添加此HTTP标头:
urlConnection.setRequestHeader("Transfer-Encoding","chunked");
我遇到了这样的问题:虽然我已经设置了分块的HTTP流模式(urlConnection.setChunkedStreamingMode(0)),但它不起作用,但将HTTP标头放在上面可以正常工作。
答案 1 :(得分:0)
我有类似的问题。在我的例子中,客户端系统安装了病毒扫描程序。那些扫描仪有时会有身份盗窃模块拦截POST
,扫描身体然后传递它。
在我的情况下,BitDefender
在传递之前缓存了大约5MB。
如果整个有效载荷较小,则POST
作为非分块固定长度请求传送。
答案 2 :(得分:0)
我使用HttpURLConnection
遇到了类似的问题。只需添加:
conn.setRequestProperty("connection", "close"); // disables Keep Alive
连接或禁用所有连接:
System.setProperty("http.keepAlive", "false");
关于disconnect()的API:
释放此连接,以便可以重复使用或关闭其资源。 与其他Java实现不同,这不一定会关闭可以重用的套接字连接。您可以通过在发出任何HTTP请求之前将http.keepAlive系统属性设置为false来禁用所有连接重用。