Можно ли перенаправлять изображения по HTTP? - PullRequest
40 голосов
/ 23 сентября 2010

Можно ли вернуть код 301/302/303 при возврате ресурса изображения? Я делал это в прошлом, и это похоже на работу. Это хорошая практика и совместима ли она с большинством браузеров?

Ответы [ 3 ]

43 голосов
/ 23 сентября 2010

Да, вы можете перенаправлять изображения, и браузеры будут следовать перенаправлениям. Но вы, как правило, захотите свести перенаправление к минимуму по соображениям производительности, поскольку для каждого перенаправления требуется отдельный HTTP-запрос, который увеличивает нагрузку на сервер и немного увеличивает время загрузки страницы конечного пользователя.

Единственное, чего вам следует избегать - это перенаправлять множество изображений на страницу. Это сильно замедлит время загрузки страницы, особенно в сетях с высокой задержкой (например, телефон, Китай, спутниковый Интернет), где каждый новый HTTP-запрос занимает много времени. Кроме того, HTTP-клиенты ограничены небольшим количеством одновременных HTTP-соединений на имя хоста сервера, поэтому даже в быстрых сетях вы столкнетесь с узким местом.

Перенаправление 1 или 2 изображений на странице, однако, не имеет большого значения.

Если вы перенаправляете изображения и они кешируются, в идеале вы должны установить заголовок HTTP Expires (и соответствующий заголовок Cache-Control) для даты в далеком будущем, чтобы, по крайней мере, при последующих посещениях страницы пользователи выиграли не нужно снова проходить через редирект.

Если причина, по которой вы перенаправляете, состоит в том, чтобы соответствовать новой схеме URL, большинство веб-серверов имеют простой способ переписать URL-адреса на сервере без необходимости отправлять фактическое перенаправление обратно клиенту. Другими словами, клиент может запросить /static/bar.jpg, но сервер может быть настроен на преобразование этого в /media/images/bar.jpg. Этот подход перезаписи URL предпочтительнее перенаправления в большинстве случаев, так как вы можете выполнить рефакторинг того, где ваш контент находится на сервере, без дополнительных затрат на перенаправление на стороне клиента или сервера.

6 голосов
/ 23 сентября 2010

Это нормально, если код на самом деле отражает реальность - например, если изображение действительно постоянно перемещается, вам следует использовать 301.

6 голосов
/ 23 сентября 2010

Да, работает.

Что касается хорошей практики, каковы альтернативы? Возвращать ответ об ошибке (404)? Не очень полезно. Вернуть изображение, которое будет возвращать перенаправленный ресурс? Вероятно, это невозможно, иначе вы бы не перенаправили. Исправить теги img с новым URL? Конечно, там, где это возможно, но, возможно, вы хотите, чтобы браузер полностью прошел перенаправление (возможно, счетчик).

...