如何在 Firebase Cloud Functions 中为特定 headers 设置缓存?

How to setup caching for specific headers in Firebase Cloud Functions?

我不确定这是否可能。我正在向外部 api 发出请求,并且在我的应用程序发出的每个请求中,我将用户的查询传递到 Cloud Function (Typescript) 中的自定义 'query' header。 ⤵

export const searchQuery = functions.https.onRequest(async (request, response) => {

    // : Reads request query data from user
    const query = request.headers.query;

...

我尝试设置缓存,以便在每次查询时单独缓存结果,但它似乎不起作用。 ~

(缓存在没有设置 vary header 的情况下工作,但它只缓存第一个搜索结果)
(所有请求都作为 GET 发送)

这是将 'query' header 设置为缓存的变化规则的块(用 Typescript 编写)。 ⤵

...

    return await admin.auth().verifyIdToken(tokenId) // : Authenticates response
        .then(() => {

            // : Set cache-control
            console.log(request.headers);
            response.set('Vary', 'Accept-Encoding, query');
            response.set("Cache-Control", "public, s-maxage=600");
            response.set("Access-Control-Allow-Origin", "*");
            response.set("Access-Control-Allow-Methods", "GET");

            // : Grab API search data
            axio.get(urlAssembler).then(APIData => {
                response.status(200).send(APIData.data);
            }).catch(error => console.log(error));

        })
        .catch((err) => response.status(401).send(err));

...

我在带有 Firebase 的 Cloud Functions 上进行了此设置,而不是在带有 Firebase 托管的 Cloud Functions 上进行了此设置。我想知道是否可能存在差异,但似乎没有。

在我的 firebase.json 中,我注意到它是为 Cloud Functions 而不是为 Firebase 托管设置的。也许我需要将其设置为 Firebase Hosting 以便为 header 定义 cache-control?

这是我的firebase.json⤵

{
  "functions": {
    "predeploy": [
      "npm --prefix \"$RESOURCE_DIR\" run lint",
      "npm --prefix \"$RESOURCE_DIR\" run build"
    ]
  }
}

我就此联系了 Firebase 支持,帮助我的人说需要使用 Firebase Hosting 才能根据上述 header 进行缓存。

我还没有测试过这个,所以一旦我测试了它,我会更新这个答案以确认它有效。

有人向我推荐了一篇文章,帮助我从 Firebase 支持中了解如何 cache within a Cloud Function,但我认为这没有使用 CDN。