gpt4 book ai didi

java - 是否可以使用 HEAD 请求获取分块编码文件的长度?

转载 作者:太空宇宙 更新时间:2023-11-04 10:42:32 28 4
gpt4 key购买 nike

我感觉这个问题的答案是否定的,但很多人告诉我,HEAD 请求可以绕过分块编码并返回内容长度。我在网上查了一下,结果似乎好坏参半,如果有人说可以,我永远找不到代码段来获取长度。我目前有一个小例子试图给我一些东西,但它返回-1。

代码段:

    try {
HttpURLConnection con = (HttpURLConnection) url.openConnection();
con.connect();
con.setRequestMethod("HEAD");
con.getInputStream();



Log.i("OSMDB", "HEAD Request: " + con.getContentLength() );

}catch(Exception e){
e.printStackTrace();
}

当我环顾四周时,我发现了这段代码,因为它返回 -1,这意味着内容长度未知,这是有道理的,因为文件是分块编码的。但人们仍然告诉我有办法。那么有没有一种方法可以在不使用 HEAD 请求下载的情况下获取分块编码文件的长度呢?或者我是否因为收到负值而别无选择?

最佳答案

作为客户端,您无法“强制”HTTP 服务器使用 Content-Length header 进行响应。服务器也不可能在不违反 HTTP 规范中的“应该”要求的情况下实现您想要的行为,该规范要求:

  • 对 HEAD 请求的响应应该包含与匹配的 GET 请求相同的 header
  • Content-Length header 不得在还包含 Transfer-Encoding header 的消息中发送

(应该不得按照 BCP-14 中的指定使用)

这意味着,如果服务器打算使用分块编码响应 GET 请求,它还应该在对同一资源的 HEAD 请求的响应中指出这一点,如果这样做,则不允许在响应中包含 Content-Length header 。

如果您认为分块编码是有意的,那么这是有道理的。对于动态生成的响应,服务器在开始传输之前不知道数据的长度。

关于java - 是否可以使用 HEAD 请求获取分块编码文件的长度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48808355/

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