如何在 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。
我不确定这是否可能。我正在向外部 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。