0

我正在使用 Cloudflare 服务人员,我希望在每个请求中:

  1. 仅请求 HTML(因此仅计为 1 个请求)
  2. 在响应中搜索字符串
  3. 如果消息存在,则清除该页面的缓存

我已经解决了第 2 点和第 3 点。无法弄清楚#1是否可行或可能。

我只需要一个请求,因为每天的免费请求数量是有限制的。否则我每页大约有 50-60 个请求。

我目前对 #1 的尝试,但不能正常工作:

async function handleRequest(request) {
  const init = {
    headers: {
      'content-type': 'text/html;charset=UTF-8',
    },
  };
  const response = await fetch(request);
  await fetch(request.url, init).then(function(response) {
    response.text().then(function(text) {
    console.log(text);
})
  }).catch(function(err) {
      // There was an error
      console.warn('Something went wrong.', err);
    });
return response;
}
addEventListener('fetch', event => {
return event.respondWith(handleRequest(event.request))
});
4

1 回答 1

1

您不能请求“仅 html”,工作人员将对与其部署的路线匹配的任何请求采取行动。如果您只关心 html,则需要设置您的工作程序路径以仅过滤到您想要运行工作程序的端点。

或者,您可以在每个请求上使用工作人员,并且仅在响应 Content-Type 是您关心的内容时才执行您的逻辑。这将是这样的:

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

async function handleRequest(request) {
  let response = await fetch(request);

  let type = response.headers.get("Content-Type") || "";
  if (type.startsWith("text/")) {
    //this is where your custom logic goes
  }
  return response;
}
于 2020-06-10T00:37:56.487 回答