7

我的服务器版本在我的开发机器上如下:

Apache/2.2.21 (Win32) mod_fcgid/2.3.6

我一直在测试HttpURLConnection,因为我的项目需要简单的流媒体功能。我已经阅读了@BalusC 关于如何使用该课程的精彩概要。

使用 java.net.URLConnection 触发和处理 HTTP 请求

我目前遇到的麻烦是在设置setChunkedStreamingMode. 无论我将它设置为我的流什么,似乎都没有将它发送到服务器,当我的服务器 api 方法/连接被调用/创建时,数据流是空的。但是,如果我删除它,它工作正常。

我见过另一个有类似问题的人:

Java/Android HttpURLConnection setChunkedStreamingMode 不适用于所有 PHP 服务器

但没有真正的解决方案。我无法将其设置为setFixedLengthStreamingMode仅仅因为内容(json)的长度是可变的。

这不行。我可能会传输大量数据,因此无法将数据存储在内存中。

我的问题是,我怎样才能让 setChunkedStreamingMode 玩得很好?这是服务器设置问题还是可以在代码中修复?

编辑 我现在已经在我的生产服务器上测试了我的代码,它没有问题。但是,我仍然想知道为什么我的本地机器上的 Apache 服务器会失败。任何帮助仍然非常感谢。

4

3 回答 3

1

尝试添加此 HTTP 标头:

urlConnection.setRequestHeader("Transfer-Encoding","chunked");

我遇到了这样的问题:虽然我设置了分块 HTTP 流模式(urlConnection.setChunkedStreamingMode(0)),但它不起作用,但将 HTTP 标头放在它上面可以正常工作。

于 2013-04-10T19:26:38.850 回答
0

我在使用HttpURLConnection. 只需添加:

conn.setRequestProperty("connection", "close"); // disables Keep Alive

到您的连接或为所有连接禁用它:

System.setProperty("http.keepAlive", "false");

从关于disconnect()的API:

释放此连接,以便其资源可以被重用或关闭。与其他 Java 实现不同,这不一定会关闭可重用的套接字连接。您可以通过在发出任何 HTTP 请求之前将 http.keepAlive 系统属性设置为 false 来禁用所有连接重用。

于 2015-03-19T23:45:00.897 回答
0

我有一个类似的问题。在我的情况下,它是安装了病毒扫描程序的客户端系统。这些扫描仪有时具有身份盗用模块,可以拦截POSTs,扫描身体,然后将其传递。

在我的情况下BitDefender,在传递之前缓存了大约 5MB。

如果整个有效负载较少,则POST作为非分块固定长度请求交付。

于 2014-06-18T16:55:32.360 回答