61

我在这样的网站上有一些图像标签。

<img src="img.png"/>

当我尝试加载它们时,它们只加载了一半。当我在网络控制台中检查请求时,我看到响应是:

206部分内容

我用谷歌搜索了它,它说如果标题中设置了一个范围,它将是这样的。但是这些标题实际设置在哪里?以及如何避免这种情况并加载完整图像?

4

4 回答 4

56

从 user166390 对问题的回答为什么Firebug 在视频加载请求中显示“206 Partial Content”响应?

当客户端请求范围(例如“给我前 2MB 的视频数据”)时,可以从服务器发送部分内容代码 (206 )。

以块的形式下载数据以避免获取未使用的资源是至关重要的。(我很少在线观看完整的视频。)查看对Range标头的传出请求。

于 2013-04-03T12:33:33.490 回答
8

由客户端进行另一个调用以获取其余数据(或下一位)。你不需要做任何事情,他们最终会得到完整的图像,即使它需要几个 http 调用。

于 2013-04-03T12:32:54.887 回答
5

首先:

HTTP206 Partial Content成功状态响应代码表示请求已成功,并且正文包含请求的数据范围,如Range请求标头中所述。

如果只有一个范围,Content-Type则将整个响应的 the 设置为文档的类型,并Content-Range提供 a。

如果返回多个范围,Content-Type则设置为multipart/byteranges,每个片段覆盖一个范围,Content-Range并对其进行Content-Type描述。

来自 Mozilla 优秀的 HTTP 状态码参考。

下一个:

在资源上设置的 HTTP 标头通常由 Web 服务器设置。但是,如果文件很大,例如视频文件,浏览器可以请求正在加载的资源块。通常HTTP 206会从客户端发起的请求中返回一个标头。在 apache 中的资源上设置的标头设置mod_headershttpd.conf. 查找以下行以查看是否打开了部分内容:

Header set Accept-Ranges bytes

本节控制 apache 设置的标头的行为,因此它将是一个很好的起点。

然而,可以通过多种不同的方式设置标题。例如,当使用 apache 时,您可以控制加载的图像,以便它们缓存。这可以使用[a2enmod module][2]. 这将减少服务器上的负载。

于 2019-03-25T01:45:28.957 回答
1

从不同的子域加载字体时,我遇到了类似的问题。在我的情况下,由于跨域问题,我得到了 206,我只是通过将 .htaccess 文件放在我的根文件夹中来解决它:

<IfModule mod_headers.c>
    Header set Access-Control-Allow-Origin "*"
</IfModule>
于 2014-10-04T08:48:53.907 回答