Http 如果web浏览器没有';我不知道文件的大小?

Http 如果web浏览器没有';我不知道文件的大小?,http,browser,Http,Browser,我正在编写一个下载管理器,我注意到我遇到的所有网页似乎都没有设置ContentLength标题,而其他媒体类型(图像)却设置了标题。然而,当我加载一个页面(在Firefox中)时,我会在加载时得到一个进度。如果不是文件大小的话,这是基于什么的?每个进度条都是猜测。如果你想知道Firefox会做出什么样的猜测,它的源代码是公开的,供公众查看 由于一个网页可能是许多下载的总和,其中任何一个都可能有未知的大小,因此,与请求的项目数相比,进度更多的是完成的项目数,而不是字节的精确度量。我认为大多数浏览器

我正在编写一个下载管理器,我注意到我遇到的所有网页似乎都没有设置
ContentLength
标题,而其他媒体类型(图像)却设置了标题。然而,当我加载一个页面(在Firefox中)时,我会在加载时得到一个进度。如果不是文件大小的话,这是基于什么的?

每个进度条都是猜测。如果你想知道Firefox会做出什么样的猜测,它的源代码是公开的,供公众查看

由于一个网页可能是许多下载的总和,其中任何一个都可能有未知的大小,因此,与请求的项目数相比,进度更多的是完成的项目数,而不是字节的精确度量。我认为大多数浏览器都将dns解析作为一个重要的进步

首先选择获取主文档第一个字节所涉及的dns、重定向和其他握手的进度,比如说总进度的20%。当您获得主文档的第一个字节时,您的进度为20%

您还可以为运行Java脚本和进行页面布局预留一些进度的尾部空间。比如说还有10%,剩下70%代表下载

由于主文档正在下载,请计算需要下载的所有其他资源。如果有50个额外的资源,那么主文档占剩余70%的下载量的2%,因此当它完成时,无论它有多大,您的进度都接近22%。当这50种资源中的每一种都到达时,进展会稍微加快

您可以根据已知的大小,甚至根据类型来计算重量。因此,css文件可能算作1项,图像算作3项,电影算作10项。对于给定大小的任何项目,您都可以更精确地增加总体进度


简而言之,它是一个聚合进度条,表示任意数量的任务。即使已知给定任务的字节数,时间也是未知的。

亲自深入代码并不是一个有用的答案。这与发布LMGTFY的链接差不多。聪明!在我的应用程序中,我只关心下载HTML和其他元素所需的时间;我忘了浏览器还有一点工作要做:)但它会大量下载页面,所以我可能只需要平均页面大小,然后假装我知道它有多大:)