java - 为什么 java 不读取 Content-length 响应 header ?

标签 java networking web content-length

我有以下代码来读取以下 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 粘贴到浏览器中

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

然后在 google chrome 中的 inspect element > network 下,您将看到浏览器正确读取了内容长度。

内容长度:79476777

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

最佳答案

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

  1. 发送请求体后关闭套接字。在 HTTP 1.1 中,我认为这必须伴随一个“Connection: close” header 。在这种情况下,内容长度就是正文的长度,您必须全部阅读才能测量。

  2. 使用分块传输编码。在这种情况下,内容长度是 block 长度的总和。同样,您必须全部阅读以确定长度。

关于java - 为什么 java 不读取 Content-length 响应 header ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25128161/

相关文章:

java - 使用 thymeleaf 和 spring boot 的动态下拉菜单

java - 如何处理服务器之间的时间不同步

linux - 运行 Web 服务器 (lightttpd) 和 (curl) 客户端的 Linux 服务器上的隔离测试网络

html - 如何从 Photoshop 导出 SVG 文件以便我可以对其进行编辑?

java - 从哈希表中读取值显示了自然顺序的倒数

java - G1 的 ParallelGCThreads

java - Pcsc -smartcard 获取 UID

linux - 查找 Ubuntu 驱动程序的源代码

javascript - 如何在 ReactJS 中为 Owl-carousel 显示加载骨架/闪光效果

css - 在带有深色边框的图像底部添加文本