重定向图片的 HTTP 请求是否可行?

50

返回图片资源时,使用301/302/303状态码是否可行?我过去这样做过,看起来可以运行。这种做法是否符合最佳实践,并且是否兼容大多数浏览器?

3个回答

50

是的,您可以重定向图像并且浏览器会遵循重定向。但出于性能原因,您通常会希望尽量减少重定向次数,因为每个重定向都需要单独的HTTP请求,这会增加服务器负载并略微增加终端用户页面加载时间。

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

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

如果您重定向图像并且它们是可缓存的,则最好设置HTTP过期头(和适当的Cache-Control头),以便在以后再访问页面时,用户不必再次通过重定向。

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


我不主张使用301重定向或改写,因为这取决于项目的选择,但我想提出另一个改写考虑。改写并非没有成本,它们需要一定程度的额外处理资源。在许多情况下,这不是一个问题,因为总资源消耗量对应于改写复杂性和执行次数。我只是想确保每个人都明白,每种方法都有其成本,每个可能的解决方案也是如此。 - J. M. Becker
只是想指出一个非常合理的用例:将“本地”图像重定向到CDN。 - Alex from Jitbit

6

是的,它有效。

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


6

如果代码确实反映了现实情况,那么没问题 - 例如,如果一个图像确实已经永久移动,你应该使用301重定向。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接