web-dev-qa-db-ja.com

HTTPリダイレクト画像に問題はありませんか?

画像リソースを返すときに301/302/303コードを返すことは問題ありませんか?私は過去にこれを行ったことがあり、うまくいくようです。それは良い習慣であり、ほとんどのブラウザと互換性がありますか?

42
Joe

はい、画像をリダイレクトでき、ブラウザはリダイレクトに従います。ただし、通常はパフォーマンス上の理由からリダイレクトを最小限に抑える必要があります。リダイレクトごとに個別のHTTPリクエストが必要になるため、サーバーのオーバーヘッドが増加し、エンドユーザーのページの読み込み時間が少し長くなります。

間違いなく避けるべきことは、ページ上の多くの画像をリダイレクトすることです。これにより、ページの読み込み時間が大幅に遅くなります。特に、待ち時間が長いネットワーク(電話、中国、衛星インターネットなど)では、新しいHTTPリクエストごとに長い時間がかかります。また、HTTPクライアントはサーバーホスト名ごとの少数の同時HTTP接続に制限されているため、高速ネットワーク上でもボトルネックになります。

ただし、ページ上の1つまたは2つの画像をリダイレクトすることは大したことではありません。

画像をリダイレクトし、それらがキャッシュ可能である場合、理想的には、遠い将来の日付のHTTP Expiresヘッダー(および適切なCache-Controlヘッダー)を設定し、少なくともユーザーが以降のページにアクセスしたときに、リダイレクトを再度実行します。

リダイレクトする理由が新しいURLスキームへの準拠である場合、ほとんどのWebサーバーは、実際のリダイレクトをクライアントに送り返すことなく、サーバー上のURLを簡単に書き換えることができます。つまり、クライアントは/static/bar.jpgを要求できますが、サーバーはそれを/media/images/bar.jpgに変換するように構成できます。クライアントまたはサーバー側でリダイレクトのオーバーヘッドを発生させることなく、コンテンツがサーバー上に存在する場所をリファクタリングできるため、このURL書き換えアプローチはほとんどの場合、リダイレクトよりも望ましい方法です。

44
Justin Grant

はい、動作します。

良い実践であることについて、代替案は何ですか?エラー応答(404)を返しますか?あまり役に立たなかった。リダイレクトされたリソースが返す画像を返しますか?おそらく不可能です。それ以外の場合はリダイレクトされません。新しいURLでimgタグを修正しますか?もちろん、可能であれば、ブラウザでリダイレクトを実行してください(おそらくカウンタ)。

6
Thilo

コードが実際に現実を反映している場合は問題ありません。たとえば、画像が実際に完全に移動している場合、すべき 301を使用します。

6
Oded