首页 > 解决方案 > 如何在本地主机上使用缓存控制标头测试 Firebase 函数?

问题描述

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

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

当 Cache Control Header 已使用成功设置Express response object(通过检查 Chrome 的 Network 选项卡确认)后,无论它是在 localhost 还是生产服务器上,都不应在第一次重新加载后再次调用 Firebase Https Functions(不可调用的函数),直到缓存已过期。

我对吗?但是经过几轮测试后,无论我的网络浏览器刷新多少次,我在 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 文档上:

不过,您可以为动态内容配置缓存行为。例如,如果一个函数只定期生成新内容,您可以通过至少在短时间内缓存生成的内容来加速您的应用程序。

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

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

请指教,非常感谢!

标签: firebasecachinggoogle-cloud-functions

解决方案


根据我对文档的理解和检查您的测试,只有从 CDN 提供内容,您才能节省成本。

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

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


推荐阅读