コンテンツにスキップ

同一URLの直接アクセスによるA/Bテスト

クッキーに基づいて提供されるレスポンスを制御することでA/Bテストを設定します。このバージョンは、リクエストをオリジンでテストおよび制御に渡すことをサポートし、ランダム割り当てをバイパスします。

const NAME = "myExampleWorkersABTest";
export default {
async fetch(req) {
const url = new URL(req.url);
// コントロールおよびテストルートへの直接アクセスを許可するためにパススルーを有効にします。
if (url.pathname.startsWith("/control") || url.pathname.startsWith("/test"))
return fetch(req);
// このリクエスターがどのグループに属しているかを判断します。
const cookie = req.headers.get("cookie");
if (cookie && cookie.includes(`${NAME}=control`)) {
url.pathname = "/control" + url.pathname;
} else if (cookie && cookie.includes(`${NAME}=test`)) {
url.pathname = "/test" + url.pathname;
} else {
// クッキーがない場合、これは新しいクライアントです。グループを選択し、クッキーを設定します。
const group = Math.random() < 0.5 ? "test" : "control"; // 50/50の分割
if (group === "control") {
url.pathname = "/control" + url.pathname;
} else {
url.pathname = "/test" + url.pathname;
}
// 不変性を避けるためにレスポンスを再構築します
let res = await fetch(url);
res = new Response(res.body, res);
// 永続的なA/Bセッションを有効にするためにクッキーを設定します。
res.headers.append("Set-Cookie", `${NAME}=${group}; path=/`);
return res;
}
return fetch(url);
},
};