本文介绍请求特征识别示例场景及结果。

代码

根据客户端请求的URL、请求方法、UserAgent、IP 等特征做不同的策略,以简单的封禁举例:

async function handleRequest(request) {

  const url = new URL(request.url)

  // 拒绝访问.txt或.mp4后缀名的请求
  const extRegExp = new RegExp(/\.(txt|mp4)$/)

  if (extRegExp.test(url.pathname)) {
    return new Response("403", { status: 403 })
  }

  // 给Post请求返回不同的内容
  if (request.method === "POST") {
    return new Response("POST Request")
  }

  // 禁用特定UA的请求
  const ua = request.headers.get("User-Agent") || ""
  if (ua.includes("value")) {
    return new Response("403", { status: 403 })
  }

  // 禁用指定客户端IP的请求,需读取 Ali-Cdn-Real-Ip
  const clientIP = request.headers.get("Ali-Cdn-Real-Ip")
  if (clientIP === "192.168.0.1") {
    return new Response("403", { status: 403 })
  }

  return fetch(request)
}

addEventListener("fetch", event => {
  event.respondWith(handleRequest(event.request))
})

结果

命中指定特征的请求: 403
正常请求: 5