簡體   English   中英

CloudFlare Worker Cache API 不存儲提取結果

[英]CloudFlare Worker Cache API Not Storing Fetch Results

我剛剛在這個簡單的工人身上花了一整天,但我無處可去。

我在 CloudFlare 站點上關注了緩存 API 示例,也瀏覽了 StackOverflow 的帖子,但我仍然無處可去。

這篇文章( Cloudflares Worker Cache API 有問題)看起來正是我所需要的,但它沒有幫助。

基本上,我試圖做的就是使用緩存 API 將某些頁面緩存一段時間。 我最終需要為每個國家/地區代碼做特定的緩存(這就是為什么我使用工作程序而不是頁面規則)但現在我試圖做的就是讓基本的緩存 API 作為測試工作。

這是代碼,它基本上與他們網站上的示例代碼相同

處理程序

export async function handleRequest(event: FetchEvent): Promise<Response> {
  const { request } = event
  const cacheUrl = new URL(request.url)
  const cacheKey = new Request(cacheUrl.toString(), request)
  const cache = caches.default

  let response = await cache.match(cacheKey)
  if (!response) {
    console.log('NO CACHE MATCH')
    // If not in cache, get it from origin
    response = await fetch(request)
    // Must use Response constructor to inherit all of response's fields
    response = new Response(response.body, response)
    response.headers.append('Cache-Control', 's-maxage=10')
    event.waitUntil(cache.put(cacheKey, response.clone()))
  } 
  return response
}

索引.ts

import { handleRequest } from './handler'

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

我知道您不能在 workers.dev 域中使用 Cache API,所以我已將 worker 部署到自定義域,因此它應該可以訪問 API。

我試過了

  • 從 cache.put 中注銷響應 - 什么都沒有
  • 將緩存鍵從 Response obj 更改為 URL(字符串) - 沒有
  • 直接等待 cache.put - 什么都沒有
  • 使用自定義緩存命名空間(所以 await caches.open('pages')) - 沒有

基本上,我只是緩存未命中,請求會傳遞到我的網絡服務器。 我可以看到控制台日志,一切都運行良好,只是從不緩存或從未找到緩存。

調試起來非常困難,而且這些方法幾乎沒有返回任何信息。 cache.put 不返回任何內容, cache.match 不返回任何內容。 他們也可能被嘲笑。

我使用 wrangler 來構建/發布,並且一切正常。

有人可以在這里提供幫助嗎?

我認為你的代碼看起來很簡單/有意義。 所以,對我來說,下一個可能性似乎是某種數據問題(例如,響應格式)。 某些標頭,例如Cache-Control和特別是Set-Cookie會影響它是否可以緩存 - https://developers.cloudflare.com/workers/runtime-apis/cache#headers

您能否驗證您的響應不包含使其無法緩存的內容? 如果您能夠分享完整的回復,或僅分享標題,那也會有所幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM