7

ブラウザがサポートしている場合はmod_negotiationを使用してwebp画像を提供し、そうでない場合はjpgを使用することはできますか?

たとえば、パス/ images / testを使用して画像にリンクすると、UAがwebpについて知っている場合は/images/test.webpにある画像を提供し、そうでない場合はjpgを提供しますか?

Accept:*/*いろいろ調べてみましたが、ChromeのAcceptヘッダーは、画像の種類を指定するのではなく、少なくとものように見えます。

これがそれを行う方法ではない場合、誰か他の提案がありますか?

4

2 に答える 2

2

WebP 画像を提供するために、ファイルの存在と WebP 画像のサポートを確認する nginx の書き換えルールを使用します。OPがmod_negotiationについて言及したので、Apache mod_rewriteに移植しました。書き換えは、「chrome」という単語を含むユーザー エージェントを探し、.jpg または .png ファイルと同じ名前とパスを持つ .webp 拡張子を持つファイルをチェックし、そうであれば WebP ファイルを提供します。書き換えルールは少し厄介ですが、仕事は完了します。

AddType image/webp .webp
# strip the extension off of all JPGs
RewriteCond %{HTTP_USER_AGENT} (chrome) [NC]
RewriteRule (.*)\.jpg$ $1

#check for a webp file, if so serve it
RewriteCond   %{REQUEST_FILENAME}.webp  -f
RewriteRule   (.*)  $1.webp [E=WEBP:1]

#check for if we did not have a webp file and we do have a jpg, if so serve it
RewriteCond   %{REQUEST_FILENAME}.jpg  -f
RewriteCond   %{REQUEST_FILENAME}.webp  !-f
RewriteRule   (.*)  $1.jpg

# strip the extension off of all PNGs
RewriteCond %{HTTP_USER_AGENT} (chrome) [NC]
RewriteRule (.*)\.png$ $1

#check for a webp file, if so serve it
RewriteCond   %{REQUEST_FILENAME}.webp  -f
RewriteRule   (.*)  $1.webp [E=WEBP:1]

#check for if we did not have a webp file and we do have a png, if so serve it
RewriteCond   %{REQUEST_FILENAME}.png  -f
RewriteCond   %{REQUEST_FILENAME}.webp  !-f
RewriteRule   (.*)  $1.png

私のサイトでは、ユーザー エージェント文字列に依存する代わりに、ブラウザーで WebP のサポートを検出できた後、JavaScript を介して写真を読み込むことができるという贅沢があります。WebP サポートが存在する場合は、画像の読み込みを開始する前に Cookie を設定します。したがって、この RewriteCond の代わりに

RewriteCond %{HTTP_USER_AGENT} (chrome) [NC]

私はこれを使用します

RewriteCond %{HTTP_COOKIE} supports_webp
于 2011-06-23T22:42:53.737 に答える
1

Accept ヘッダーは必須ではありません。意味のある値が指定されている場合は、その特定の要求に対してクライアントが受信する必要があるコンテンツ タイプをサーバーに示すだけです。

以前は、png が十分にサポートされていなかったときのように、次のようなルールを使用しました (質問に合わせて調整しました)。Webp は 2 つのブラウザーでサポートされているため、ルールは非常に単純です。

RewriteEngine On

RewriteCond %{HTTP_USER_AGENT} \ Chrome/ [OR]
RewriteCond %{HTTP_USER_AGENT} Opera.*Version/11.1
RewriteRule .* - [E=imgext:webp,T=image/webp]

RewriteCond %{ENV:imgext} !webp
RewriteRule .* - [E=imgext:jpg]

RewriteCond %{REQUEST_URI} ^/images/
RewriteCond %{REQUEST_FILENAME} !-s
RewriteRule (.*) $1\.%{ENV:imgext} [QSA]
于 2011-06-23T22:42:10.443 に答える