【问题标题】:Is it OK to HTTP redirect images?HTTP重定向图像可以吗?
【发布时间】:2023-03-10 08:30:02
【问题描述】:

返回图片资源时返回301/302/303码可以吗?我过去做过这个,它似乎有效。这是一种好的做法吗?它是否与大多数浏览器兼容?

【问题讨论】:

    标签: image http redirect http-headers


    【解决方案1】:

    是的,您可以重定向图像,浏览器将遵循重定向。但出于性能原因,您通常希望将重定向保持在最低限度,因为每个重定向都需要单独的 HTTP 请求,这会增加服务器开销并稍微增加最终用户页面加载时间。

    您绝对应该避免的一件事是重定向页面上的许多图像。这将严重减慢页面加载时间,尤其是在每个新的 HTTP 请求都需要很长时间的高延迟网络(例如电话、中国、卫星互联网)上。此外,HTTP 客户端仅限于每个服务器主机名的少量同时 HTTP 连接,因此即使在快速网络上,您最终也会遇到瓶颈。

    但是,在页面上重定向 1 或 2 个图像并不是什么大问题。

    如果您重定向图像并且它们是可缓存的,那么理想情况下,您应该为遥远的将来的某个日期设置一个 HTTP Expires 标头(以及相应的 Cache-Control 标头),这样至少在用户后续访问该页面时会赢不必再次通过重定向。

    如果您进行重定向的原因是为了符合新的 URL 方案,那么大多数 Web 服务器都有一种简单的方法来重写服务器上的 URL,而无需将实际的重定向发送回客户端。换句话说,客户端可以请求/static/bar.jpg,但服务器可以配置为将其转换为/media/images/bar.jpg。在大多数情况下,这种 URL 重写方法比重定向更可取,因为您可以重构内容在服务器上的位置,而不会在客户端或服务器端产生重定向开销。

    【讨论】:

    • 我不提倡 301 或重写,因为这取决于项目是否更可取,但我想提一下额外的重写考虑。重写不是免费的,它们需要一定程度的额外处理资源。在许多情况下,这不是问题,因为总资源消耗对应于重写复杂性和执行次数。我只是想确保每个人都明白这两种方法都有其成本,每个潜在的解决方案也是如此。
    • 只是想指出一个非常合理的用例:将“本地”图像重定向到 CDN
    【解决方案2】:

    是的,它有效。

    关于良好实践,有哪些替代方案?返回错误响应(404)?不是很有帮助。返回重定向资源将返回的图像?可能不可能,否则你不会重定向。使用新 URL 修复 img 标签?当然,在可能的情况下,但也许您希望浏览器彻底重定向(可能是一个计数器)。

    【讨论】:

      【解决方案3】:

      如果代码确实反映了现实也没关系 - 例如,如果图像确实永久移动,您应该使用 301。

      【讨论】:

        猜你喜欢
        • 2018-11-21
        • 2016-01-12
        • 1970-01-01
        • 1970-01-01
        • 2013-09-27
        • 2014-12-03
        • 2012-03-27
        • 2022-01-05
        • 2017-10-06
        相关资源
        最近更新 更多