firebase - 如何在本地主机上使用缓存控制标头测试 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 执行成本方面的有效性?
请指教,非常感谢!
解决方案
根据我对文档的理解和检查您的测试,只有从 CDN 提供内容,您才能节省成本。
即使您的请求得到了状态码304 Not Modified
,如果您不使用 Firebase 托管 CDN,您似乎仍在发出请求并调用该函数。
因此,要进行测试以查看是否可以通过不多次调用该函数来节省成本,您应该设置Firebase 托管并执行相同的测试以查看来自 CDN 的响应是否调用该函数。
推荐阅读
- arrays - 根据特定值的第一次出现替换 numpy 数组的元素
- vb.net - 从任务栏最上方显示的 Windows 窗体
- javascript - for循环在javascript中跳过数组中的一项
- python - 具有匹配索引的 2 个数组列表的乘法
- regex - htaccess 在没有设置 cookie 的情况下限制对 WordPress 目录中文件的访问
- kotlin - 如何使按钮在片段中工作(Kotlin)
- laravel - 传递给方法的 Laravel 错误参数 1 必须是 App\Model 的实例,给定的 Illuminate\Database\Eloquent\Collection 的实例
- ios - Flutter 如何获取 ios 的 onResum
- java - 我在 eclipse 中收到这个 xpath 错误,我认为 xpath 是正确的(1 of 1)但是为什么会出错
- amazon-web-services - 可用区和区域名称之间的 aws 映射