我有以下代码来读取以下 url 指向的资源的内容长度响应 header ,但此代码不读取内容长度并返回 -1。我想知道为什么。
try{
String song_url = "https://doc-0c-6o-docs.googleusercontent.com/docs/securesc/mtop3kcd4g9holc81thpce8mmck772ja/10to2su90o897bl390ojai9srph2fmvq/1407182400000/15635312626103908265/15635312626103908265/0B8CobC-HnuclMm5sUnVpOW13eEk?e=download&h=16653014193614665626&nonce=5beqd4pl58o30&user=15635312626103908265&hash=qbqjjhkrpco10b8ggu7ko5qa5c64th2m";
URL web = new URL(song_url);
con1 = web.openConnection();
total_size = con1.getContentLength();
((HttpURLConnection)con1).disconnect();
return total_size;
}
catch(Exception e){
e.printStackTrace();
}
((HttpURLConnection)con1).disconnect();
现在,奇怪的是如果你只是将这个 url 粘贴到浏览器中
然后在 google chrome 中的 inspect element > network 下,您将看到浏览器正确读取了内容长度。
内容长度:79476777
但为什么 java 代码无法读取内容长度?这是我正在使用的库的问题吗?感谢您的帮助!
最佳答案
那是因为服务器没有发送 Content-length header 。它至少有两种其他方式可以传达长度:
发送请求体后关闭套接字。在 HTTP 1.1 中,我认为这必须伴随一个“Connection: close” header 。在这种情况下,内容长度就是正文的长度,您必须全部阅读才能测量。
使用分块传输编码。在这种情况下,内容长度是 block 长度的总和。同样,您必须全部阅读以确定长度。
关于java - 为什么 java 不读取 Content-length 响应 header ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25128161/