【问题标题】:How to test Firebase Functions with Cache Control Header on localhost?如何在本地主机上使用缓存控制标头测试 Firebase 函数?
【发布时间】:2021-04-05 12:42:07
【问题描述】:

我是 Cache Control Header 实现的新手,我需要有人指出我对 Firebase Cloud Functions 上的缓存控制效果的任何错误和/或误解。

我对 Firebase 函数缓存控制的理解和期望

当使用Express response object 成功设置缓存控制标头时(通过从 Chrome 的网络检查确认 选项卡),无论是在本地主机还是生产服务器上,Firebase 不应再次调用 Https 函数(不可调用函数) 在第一次重新加载后直到缓存过期。

我说的对吗?但是经过几轮测试后,无论我的 Web 浏览器刷新了多少次,我在 localhost 上的云功能似乎仍然始终被调用(通过服务器控制台日志记录确认)。以下是我当前的 Http 标头:

**General:**
    Request URL: http://localhost:5005/otk-web-solutions?id=B0Y0jp2x83WVYzWrpg5y
    Request Method: GET
    Status Code: 304 Not Modified
    Remote Address: 127.0.0.1:5005
    Referrer Policy: strict-origin-when-cross-origin

**Response Headers:**
    Access-Control-Allow-Origin: *
    cache-control: public, max-age=432000, s-maxage=432000
    content-length: 9688
    content-type: text/html; charset=utf-8
    date: Mon, 05 Apr 2021 11:52:20 GMT
    etag: W/"25d8-TxL0Q+ujhzDjys8IJ1mLigY7jT8"
    vary: Origin, Accept-Encoding, Authorization, Cookie
    x-powered-by: Express

**Request Headers:**
    Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
    Accept-Encoding: gzip, deflate, br
    Accept-Language: en-GB,en;q=0.9,en-US;q=0.8,zh;q=0.7
    Cache-Control: max-age=0
    Connection: keep-alive
    Cookie: _ga=GA1.1.816734993.1603107580; _gid=GA1.1.223745218.1617606982; __atuvc=20%7C12%2C15%7C13%2C23%7C14; __atuvs=606aec5f76521aab00a
    DNT: 1
    Host: localhost:5005
    If-None-Match: W/"25d8-TxL0Q+ujhzDjys8IJ1mLigY7jT8"
    sec-ch-ua: "Google Chrome";v="89", "Chromium";v="89", ";Not A Brand";v="99"
    sec-ch-ua-mobile: ?0
    Sec-Fetch-Dest: document
    Sec-Fetch-Mode: navigate
    Sec-Fetch-Site: none
    Sec-Fetch-User: ?1
    Upgrade-Insecure-Requests: 1
    User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.114 Safari/537.36

**Query String Parameters:**
    id: B0Y0jp2x83WVYzWrpg5y

开启Firebase documentation

不过,您可以为动态内容配置缓存行为。为了 例如,如果一个函数只定期生成新内容,你 可以通过将生成的内容缓存至少一 很短的时间。

您还可以潜在地降低函数执行成本,因为 内容从 CDN 提供,而不是通过触发函数提供。

难道缓存控制标头对 localhost 没有影响,但 Firebase CDN 除外,这意味着只有当我们将其部署到生产服务器以便缓存在云上工作时CDN?是否有正确的方法来实施此类测试以查看缓存控制标头的有效性在帮助节省 Firebase Cloud Functions 的执行成本方面?

请多多指教,万分感谢!

【问题讨论】:

    标签: firebase caching google-cloud-functions


    【解决方案1】:

    根据我对documentation的理解,在检查了你的测试之后,只有从CDN提供内容,你才能节省成本。

    即使您的请求通过状态代码 304 Not Modified 得到满足,如果您不使用 Firebase 托管 CDN,您似乎仍在发出请求并调用该函数。

    因此,要进行测试,看看是否可以通过不多次调用该函数来节省成本,您应该设置Firebase Hosting 并进行相同的测试,以查看来自 CDN 的响应是否调用了该函数。

    【讨论】:

    • 抱歉,我不明白您所说的 setup Firebase Hosting 是什么意思——我从第一天开始就设置了 Firebase Hosting,并且无论如何都使用最新版本的 Firebase Emulators .
    • @AntonioOoi 抱歉,我这么说是因为如果你有 Firebase 托管,你可以使用他们的 CDN 来测试与浏览器缓存相比是否使用它来调用函数。
    • 这意味着没有办法测试localhost上的缓存对吧?
    • @AntonioOoi 您必须使用 Firebase 托管 CDN 进行测试。缓存在浏览器的本地主机中,但似乎只有通过 CDN 提供内容才能节省成本,因为它不会调用该函数。
    猜你喜欢
    • 2011-02-05
    • 1970-01-01
    • 1970-01-01
    • 2021-03-02
    • 1970-01-01
    • 2020-07-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多