为什么java没有读取Content-length响应头?

时间:2014-08-04 21:50:14

标签: java networking web content-length

我有以下代码来读取由以下url指向的资源的内容长度响应头,但是此代码没有读取内容长度并返回-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();

现在,奇怪的是,如果您只是将此网址粘贴到浏览器中

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

然后在inspect元素>下谷歌浏览器中的网络然后您将看到浏览器正确读取内容长度。

内容长度:79476777

但为什么java代码无法读取内容长度?这是我正在使用的库的问题吗?谢谢你的帮助!

1 个答案:

答案 0 :(得分:3)

那是因为服务器没有发送Content-length头。它至少还有两种方式可以传达这个长度:

  1. 在发送请求正文后关闭套接字。在HTTP 1.1中,我认为这必须伴随着一个连接:关闭'头。在这种情况下,内容长度是正文的长度,你必须全部阅读以测量它。

  2. 使用分块传输编码。在这种情况下,内容长度是块长度的总和。再次,您必须阅读所有内容以确定长度。