tencent cloud

Tencent Cloud EdgeOne

ドキュメントTencent Cloud EdgeOneエッジ関数ベストプラクティスエッジ関数による適応型画像フォーマット変換の実現

エッジ関数による適応型画像フォーマット変換の実現

ダウンロード
フォーカスモード
フォントサイズ
最終更新日: 2026-10-16 10:55:27
AI翻訳
本文では、元のクライアントリクエスト URL を変更せずに、エッジ関数を使用してクライアントリクエストに含まれる User-Agent ヘッダーに基づいて返す画像ファイル形式を自動的に判断し、画像形式の変換を自動的にトリガーする方法を説明します。

背景紹介

画像コンテンツが中心のサイト、例えばニュースメディア、ECプラットフォーム、フォーラムなどでは、画像ファイルの形式をブラウザの種類に応じて適合させ、ブラウザが対応可能な画像形式を返すとともに、画像サイズを最大限に圧縮してトラフィックを節約する必要があります。例えば:
ユーザーがChrome、Opera、Firefox、Edgeブラウザを使用して画像にアクセスした場合、webp形式の画像が返されます。
ユーザーがSafariブラウザを使用して画像にアクセスした場合、jp2形式の画像が返されます。
ユーザーがIEブラウザを使用して画像にアクセスした場合、jxr形式の画像が返されます。
他のブラウザを使用して画像にアクセスした場合、webp形式の画像が返されます。
エッジ関数は柔軟な画像処理能力を提供し、元のクライアントリクエスト URL を変更せずに、EdgeOne のエッジ関数が画像形式の変換を自動的にトリガーし、クライアントの User-Agent 情報に応じて指定された画像形式を適応的に返します。これにより、ビジネスロジックを変更することなく、ユーザーに最適な形式の画像を適応的に提供し、トラフィック消費を削減できます。リクエスト URL で画像形式変換のトリガーを積極的に制御したい場合は、Image Processing 機能を参照して使用することもできます。

プリセットシナリオ

現在接続済みのサイトはexample.comです。画像コンテンツはすべてhttp://image.example.com/image/パスに保存されており、このパス配下のすべての画像をクライアントのブラウザタイプに応じて最適な画像形式で応答する必要があります。テスト用の元の画像リクエストURLはhttps://image.example.com/image/test.jpgです。アクセス後に画像形式を確認すると以下の通りです:




操作手順

1. EdgeOneコンソールにログインし、左側のメニューバーで「サービス概要」に入り、「Webサイト安全な加速」内で設定が必要なサイトをクリックします。
2. 左側のナビゲーションバーで、エッジ関数 > 関数管理をクリックします。
3. 関数管理ページで、新規関数をクリックします。
4. 新しい関数を作成するページで、関数名、関数の説明、関数コードを入力します。以下はこのシナリオのサンプルコードです:
// ブラウザ使用画像形式
const broswerFormat = {
Chrome: 'webp',
Opera: 'webp',
Firefox: 'webp',
Safari: 'jp2',
Edge: 'webp',
IE: 'jxr'
};

addEventListener('fetch', event => {
関数コードが未処理の例外をスローした場合、エッジ関数はこのリクエストをオリジンサーバーに転送します。
event.passThroughOnException();
event.respondWith(handleEvent(event));
});

async function handleEvent(event) {
const { request } = event;
const userAgent = request.headers.get('user-agent');
const bs = getBroswer(userAgent);
const format = broswerFormat[bs];
// 画像形式の変換は不要です。
if (!format) {
return fetch(request);
}

// 画像形式変換
const response = await fetch(request, {
eo: {
image: {
format
}
}
});

// レスポンスヘッダーを設定します。
response.headers.set('x-ef-format', format);
return response;
}

function getBroswer(userAgent) {
if (/Edg/i.test(userAgent)) {
return 'Edge'
}
if (/Trident/i.test(userAgent)) {
return 'IE'
}
if (/Firefox/i.test(userAgent)) {
return 'Firefox';
}
if (/Chrome/i.test(userAgent)) {
return 'Chrome';
}
if (/Opera|OPR/i.test(userAgent)) {
return 'Opera';
}
if (/Safari/i.test(userAgent)) {
return 'Safari'
}
}
5. 関数の編集が完了したら、関数を作成してデプロイをクリックします。関数のデプロイ後、トリガールールを追加をクリックして、この関数のトリガールールを設定できます。



6. 関数のトリガールールで、この関数のトリガー条件を設定します。現在のシナリオ要件に応じて、2つのトリガー条件を設定し、And ロジックでトリガーできます。
このリクエストのHOSTはImage.example.comと等しいです。
このリクエストのURL Pathは/image/*と等しいです。
リクエストURLが上記の条件をすべて満たした場合、上記のエッジ関数がトリガーされ、画像が自動的に処理されます。



7. 保存をクリックすると、トリガールールがすぐに有効になります。
8. エッジ関数の有効化状況を確認するには、以下の2つの方法で検証できます:
curlリクエストテスト
ブラウザアクセステスト
curlリクエストに指定されたUser-Agentを含めてテストできます。
Chromeなどのブラウザをテストする
Safariブラウザをテストする
IEブラウザをテストする
Mac/linux環境で、chromeブラウザのテストを例にすると、ターミナル内で次のコマンドを実行できます:curl --user-agent "chrome" https://image.example.com/image/test.jpg -i
レスポンスのContent-Type情報を確認し、image/webpであるかどうかをチェックします。


Mac/linux環境で、ターミナル内で次のコマンドを実行します:curl --user-agent "safari" https://image.example.com/image/test.jpg -i
レスポンスのContent-Type情報を確認し、image/jp2であるかどうかをチェックします。



Mac/linux環境で、ターミナル内で次のコマンドを実行します:curl --user-agent "Trident" https://image.example.com/image/test.jpg -i
レスポンスのContent-Type情報を確認し、image/vnd.ms-photoであるかどうかをチェックします。



異なるブラウザのアドレスバーでコンソールを開いた後、テスト画像のアドレスhttps://image.example.com/image/test.jpgを入力すると、レスポンス画像の形式から現在のエッジ関数が有効になっているかどうかを確認できます。
Chromeなどのブラウザをテストする
Safariブラウザをテストする
IEブラウザをテストする
chromeブラウザでテスト画像のアドレスhttps://image.example.com/image/test.jpgにアクセスすると、この画像のレスポンスはwebp形式になります。




safariブラウザでテスト画像のアドレスhttps://image.example.com/image/test.jpgにアクセスすると、この画像のレスポンスはjp2形式になります。



safariブラウザでテスト画像のアドレスhttps://image.example.com/image/test.jpgにアクセスすると、この画像のレスポンスはjxr形式になります。






詳細を見る

ヘルプとサポート

この記事はお役に立ちましたか?

フィードバック