okhttp content-length 是 -1 大文件
okhttp content-length is -1 with big files
我正在使用 okhttp 下载文件,一切正常 - 现在我想显示进度并点击 road-bump。返回的content-length为-1。
它从服务器正确返回:
⋊> ~ curl -i http://ipfs.io/ipfs/QmRMHb4Vhv8LtYqw8RkDgkdZYxJHfrfFeQaHbNUqJYmdF2 13:38:11
HTTP/1.1 200 OK
Date: Tue, 14 Jun 2016 11:38:16 GMT
Content-Type: application/octet-stream
Content-Length: 27865948
我将问题追溯到 OkHeaders.java 此处:
public static long contentLength(Headers headers) {
return stringToLong(headers.get("Content-Length"));
}
我在 headers 中看到所有其他 headers - 但没有 Content-Length - 所以 headers.get("Content-Length") returns null .任何人都知道这是怎么丢失的?
有趣的是,如果我将 url 更改为“http://google.com”,我会从 okhttp 得到一个 content-length - 但是 curl 两者看起来相同 Content-Length明智的-这真的让我感到困惑
更新:这似乎与文件的大小有关。如果我使用来自同一台服务器的较小内容,我会得到带有 okhttp 的 Content-Length。只有当文件很大时才会出现问题
看起来超过服务器使用的特定大小 chunked encoding 并且您不会获得内容长度。
HTTP/1.1 200 OK
Date: Tue, 14 Jun 2016 14:30:07 GMT
Content-Type: application/octet-stream
Transfer-Encoding: chunked
我正在使用 okhttp 下载文件,一切正常 - 现在我想显示进度并点击 road-bump。返回的content-length为-1。 它从服务器正确返回:
⋊> ~ curl -i http://ipfs.io/ipfs/QmRMHb4Vhv8LtYqw8RkDgkdZYxJHfrfFeQaHbNUqJYmdF2 13:38:11
HTTP/1.1 200 OK
Date: Tue, 14 Jun 2016 11:38:16 GMT
Content-Type: application/octet-stream
Content-Length: 27865948
我将问题追溯到 OkHeaders.java 此处:
public static long contentLength(Headers headers) {
return stringToLong(headers.get("Content-Length"));
}
我在 headers 中看到所有其他 headers - 但没有 Content-Length - 所以 headers.get("Content-Length") returns null .任何人都知道这是怎么丢失的?
有趣的是,如果我将 url 更改为“http://google.com”,我会从 okhttp 得到一个 content-length - 但是 curl 两者看起来相同 Content-Length明智的-这真的让我感到困惑
更新:这似乎与文件的大小有关。如果我使用来自同一台服务器的较小内容,我会得到带有 okhttp 的 Content-Length。只有当文件很大时才会出现问题
看起来超过服务器使用的特定大小 chunked encoding 并且您不会获得内容长度。
HTTP/1.1 200 OK
Date: Tue, 14 Jun 2016 14:30:07 GMT
Content-Type: application/octet-stream
Transfer-Encoding: chunked