如何在不实际下载资源的情况下获取资源的大小?
How can I get the size of a resource without actually downloading it?
所以我现在的带宽非常有限,我点击了 link 到 pdf 教程,然后 Chrome 开始下载它,我正在观察大小螺旋从 20Kb 向上超过 5Mb 并决定停止它。我怎么知道它不是 4Gb pdf?可笑,我知道。
但我开始想,肯定有一种方法可以让我在下载前简单地请求资源的大小来检查。也许是某种 cURL 请求?
有人知道方法吗?
您可以尝试使用 HTTP HEAD 方法。这应该让您得到没有 body 的文档的 headers。这个可能里面有内容长度。
或者您可以发送 HTTP 范围请求 header 和 GET 请求。请参阅此 document 中的第 14.35.2 节。范围 headers 看起来像:
Range: 1-20000
这将请求文档的前 20,000 个字节(八位字节)。如果文档小于 20,000 字节,您将获得整个文档。
唯一的问题是服务器可能不支持范围 header,在这种情况下,它将发送 200 状态而不是 206。在这种情况下,如果不支持,您可以重置连接想冒着消耗 5Gb 文档带宽的风险。
所以我现在的带宽非常有限,我点击了 link 到 pdf 教程,然后 Chrome 开始下载它,我正在观察大小螺旋从 20Kb 向上超过 5Mb 并决定停止它。我怎么知道它不是 4Gb pdf?可笑,我知道。
但我开始想,肯定有一种方法可以让我在下载前简单地请求资源的大小来检查。也许是某种 cURL 请求?
有人知道方法吗?
您可以尝试使用 HTTP HEAD 方法。这应该让您得到没有 body 的文档的 headers。这个可能里面有内容长度。
或者您可以发送 HTTP 范围请求 header 和 GET 请求。请参阅此 document 中的第 14.35.2 节。范围 headers 看起来像:
Range: 1-20000
这将请求文档的前 20,000 个字节(八位字节)。如果文档小于 20,000 字节,您将获得整个文档。
唯一的问题是服务器可能不支持范围 header,在这种情况下,它将发送 200 状态而不是 206。在这种情况下,如果不支持,您可以重置连接想冒着消耗 5Gb 文档带宽的风险。