假设网页中嵌入了一张图片,但是该图片不在服务器上,也找不到,服务器对该图片的请求返回 404 错误。
网页上不显示图像,不显示实际的 HTTP 响应主体。通常会显示“损坏的图像”图标。
我不知道这个问题的答案是否会根据服务器类型、操作系统或其他变量而变化......
服务器是否会为嵌入文件生成完整的 404 响应?
如果生成,浏览器是否会下载整个响应?
这个问题的灵感来自于我注意到一些大型 CDN 在其所在/favicon.ico
位置有一个透明的 1x1 ico,而不是什么都没有。我的想法是,这个64B
文件(在一种情况下)比 404 响应更小或需要的计算能力更少...
似乎没有任何 HTTP 标头字段能够表明资源已嵌入,并且如果出现 404 错误,则不需要正文。
答案1
服务器是否为嵌入文件生成完整的 404 响应?
是的。正如您所说,服务器不知道它是嵌入式文件还是独立请求。
如果是,浏览器会下载整个响应吗?
好吧,它会下载完整的 HTML 404 页面 - 但不会下载该 404 页面上的任何图像或其他相关资源。如果您打开开发人员工具,您将看到完整的 HTML 响应。
这个问题的灵感来自于我注意到一些大型 CDN 的 /favicon.ico 位置有一个透明的 1x1 ico,而不是什么都没有。我的想法是,这个 64B 文件(在一种情况下)比 404 响应更小或所需的计算能力更少……
我不太明白这一点。好吧,我知道一个像素的文件会比 404 小,但如果要努力创建一个小的 favicon.ico 文件,那么为什么不创建一个真正的文件呢?或者你是说他们创建了默认的 favicon.ico 文件,然后你可以替换它?好吧,我想这样做可能是值得的。
似乎没有任何 HTTP 标头字段能够表明资源已嵌入,并且如果出现 404 错误,则不需要正文。
正确。HTTPreferer
标头可以指示请求是否来自某个页面,但您不知道这是因为它是作为页面加载的一部分被请求的,还是有人右键单击页面并要求将图像作为单独的请求来查看。
总的来说,我宁愿花更多时间修复 404 错误,也不愿担心优化 404 页面的大小。避免在 404 错误上浪费嵌入式资源的带宽的最简单方法是确保没有任何 404 错误!
此外,如上所述,只会下载 404 页面的 HTML,因此,除非您的 404 页面非常大,或者不压缩它(使用 gzip 或 brotli),否则它的大小应该非常小。
也许,正如您所说,如果您托管客户网站,则网站图标可能是此建议的例外,因为每个页面都会要求提供它(如果未找到并缓存),但对于您拥有和管理的网站,我不会担心这一点,原因如下。