Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/http/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从Servlet等发送估计HTTP内容长度_Java_Http_Servlets_Http Headers - Fatal编程技术网

Java 从Servlet等发送估计HTTP内容长度

Java 从Servlet等发送估计HTTP内容长度,java,http,servlets,http-headers,Java,Http,Servlets,Http Headers,我经常需要从servlet/restlet或其他任何东西动态生成内容,但事先不知道长度。如果客户端是浏览器,则进度条无法正常工作,因为我尚未设置内容长度标题。有没有办法设置一个估计的内容长度,让进度条“或多或少”工作?不清楚你在问什么。您始终可以自己设置内容长度标题,尽管它需要实际匹配您发送的数据量。在不知道提前长度的情况下,处理动态数据的标准方法是缓冲输出,找到实际长度,设置标头,然后转储输出。不是真的回答你的问题,但我认为你的问题是不可能的。唯一的方法()是不设置内容长度标题,即响应标题不包

我经常需要从servlet/restlet或其他任何东西动态生成内容,但事先不知道长度。如果客户端是浏览器,则进度条无法正常工作,因为我尚未设置内容长度标题。有没有办法设置一个估计的内容长度,让进度条“或多或少”工作?

不清楚你在问什么。您始终可以自己设置内容长度标题,尽管它需要实际匹配您发送的数据量。在不知道提前长度的情况下,处理动态数据的标准方法是缓冲输出,找到实际长度,设置标头,然后转储输出。不是真的回答你的问题,但我认为你的问题是不可能的。

唯一的方法()是不设置内容长度标题,即响应标题不包含内容长度行。在这种情况下,浏览器不知道正文有多长,因此服务器“告诉”浏览器所有正文都是由服务器发送的

我不确定Java容器是否会在这种情况下自动关闭连接,或者您是否可以通过某种过滤器自行关闭连接

回答您的问题:我认为不可能给浏览器一个估计值。

不,这个:

在允许消息正文的消息中给定内容长度时,其字段值必须与消息正文中的八位字节数完全匹配。HTTP/1.1用户代理必须在收到并检测到无效长度时通知用户


因此,您不能仅发送估计的内容长度值来获取进度条。

如果事先不知道内容的长度,您可以使用(根据HTTP版本1.1)。但这并不能解决进度条问题,除非您知道要发送多少内容,否则无法使其正常工作。

虽然我不建议您这样做,但您可以将内容长度设置为内容的估计值,这样您将获得进度条。只要您能保证您的估算值等于或大于实际内容,这通常是可行的。如果实际内容大于估计值,则内容将被截断为指定的内容长度

我在Firefox、IE和Chrome上进行了测试,没有问题。HTTP规范规定,如果指定的长度与实际长度不匹配,用户代理必须通知用户,但我在测试的任何浏览器中都没有观察到这种行为


作为一种选择,我对此进行了调查,但由于在规范范围之外进行游戏可能会出现无法预料的冲突,因此放弃了它。

我也怀疑这可能是不可能的,但我希望我的HTTP fu不能胜任!