Cloudflare Workers - выборочно кешировать HTML-контент - PullRequest
0 голосов
/ 11 октября 2018

Я хочу создать Cloudflare Worker, который выборочно кэширует содержимое HTML-страницы, эквивалентное тому, если бы у меня было правило страницы для уровня кэширования = кэшировать все, пограничный кеш TTL = 30 минут

Запросы, проходящие черезниже, упрощенный, рабочий код никогда не попадает в кеш, вместо этого каждый раз отправляя запрос из моего источника.Есть идеи, что мне здесь не хватает?

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

async function handleRequest(request) {
  const url = new URL(request.url)

  if (request.method == "GET" && url.pathname == "/foo/bar") {
    newurl=url.protocol + "//" + url.hostname + url.pathname + "?" + url.search
    let response = await fetch(newurl, request, { cf: { cacheTtl: 1800 } })
    response = new Response(response.body, response)
    response.headers.delete("pragma")
    return response
  } else {
    const response = await fetch(request) 
    return response 
  }
}

1 Ответ

0 голосов
/ 12 октября 2018

Этот вызов является проблемой:

fetch(newurl, request, { cf: { cacheTtl: 1800 } })

fetch() принимает два параметра, а не три.Соглашение о вызовах JavaScript игнорирует дополнительные параметры, поэтому ваш { cf: { cacheTtl: 1800 } } игнорируется.

Похоже, что вы на самом деле не вносите изменения в URL, поэтому, возможно, вы могли бы просто сделать:

fetch(request, { cf: { cacheTtl: 1800 } })

Если вы действительно хотите переписать URL, вам потребуется двухэтапный процесс:

request = new Request(newurl, request);
let response = await fetch(request, { cf: { cacheTtl: 1800 } });
...