Firebase托管:如何防止为SPA的index.html缓存

zevdg:

我在firebase上托管SPA,几乎所有路径都被重写为index.html我正在使用基于Webpack哈希的缓存清除,因此我想始终避免缓存我的index.html文件,而不是其他任何文件。我发现很难做到这一点。具体来说,我的文件布局如下所示

/
├── index.html
├── login.html
├── js
│   ├── login.ba22ef2579d744b26c65.bundle.js
│   └── main.6d0ef60e45ae7a11063c.bundle.js
└── public
    └── favicon-16x16.ico

"sources": "index.html"在从文档中阅读此报价之前,我是从幼稚开始的。

每个定义必须具有与原始请求路径匹配的源密钥,而不管使用glob表示法的任何重写规则如何

好的,所以我想我不需要在路径上指定一个简单的glob,而是指定要在其中放置这些头文件的文件。由于大多数路径都重定向到index.html,因此我需要一个全局域,以排除所有我不想放置这些标头的路径。

供参考,我的firebase.json托管部分如下所示:

{
  "hosting": {
    "public": "dist",
    "rewrites": [
      {
        "source": "**",
        "destination": "/index.html"
      }
    ],
    "cleanUrls": true,
    "trailingSlash": false,
    "headers": [
      {
        "source": <<<WHAT-GOES-HERE?>>>,
        "headers": [
          {
            "key": "Cache-Control",
            "value": "no-cache, no-store, must-revalidate"
          },
          {
            "key": "Pragma",
            "value": "no-cache"
          },
          {
            "key": "Expires",
            "value": "0"
          }
        ]
      }
    ]
  }
}

因此,举一些重定向到index.html且不应缓存的示例

mysite.com  
mysite.com/  
mysite.com/foo/bar/baz  
mysite.com/index.html 

注意:如果最后一个缓存了,因为我在实践中没有用到,我可以住。

还有不会重定向到index.html且不应缓存的内容

**/*.* (ideally excluding index.html)
mysite.com/login  

我自己得到的最接近的显示器**/!(login|*.*)几乎适用于上面列出的所有内容,但莫名其妙地不适用于mysite.commysite.com/这两页没有被这个问题匹配,我不知道为什么。

Gijo Varghese:

这是我正在使用的配置。逻辑是对所有静态文件(如images, css, jsetc)使用缓存。对于所有其他文件,即将缓存"source": "/**"设置为no-cache。因此,对于所有其他文件,可能不会应用example.com,example.com / index.html,example.com / about-us,example.com / about-us.html缓存。

{
  "hosting": {
    "public": "dist",
    "headers": [
      {
        "source": "/**",
        "headers": [
          {
            "key": "Cache-Control",
            "value": "no-cache, no-store, must-revalidate"
          }
        ]
      },
      {
        "source":
          "**/*.@(jpg|jpeg|gif|png|svg|webp|js|css|eot|otf|ttf|ttc|woff|woff2|font.css)",
        "headers": [
          {
            "key": "Cache-Control",
            "value": "max-age=604800"
          }
        ]
      }
    ],
    "ignore": ["firebase.json", "**/.*", "**/node_modules/**"]
  }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Vuejs SPA / Gunicorn Nginx / index.html 缓存

防止使用spring-boot缓存index.html文件

如何使用HTML,Apache或PHP缓存

如何停止 Azure CDN 缓存 index.html

Firebase托管缓存错误

您如何使带有Cloudfront的S3上托管的静态站点的index.html缓存无效?

使用workbox.js网络首次缓存index.html

Angular Service Worker和index.html缓存

HTML应用程序缓存-检查是否为空

Firebase部署不更新HTML文件,不是缓存问题

更改index.html时强制更新已安装的PWA(防止缓存)

如何强制浏览器缓存页面.html?

如何在响应式网站中使sitecore的html缓存无效?

如何使反应阻止浏览器缓存外部加载的html?

在HTML JS中更新内容后如何加载新的缓存?

如何在HTML页面加载时清除缓存?

如何为HTML <video>标签缓存mp4视频?

如何防止HTML 5页面阻止存储浏览器缓存?

如何防止缓存图像?

如何防止ListView缓存

如何在Firebase托管中利用浏览器缓存

如何使CloudFront永不在S3存储桶上缓存index.html

当网站内容在AngularJS网站中发生更改时,如何使index.html不缓存?

防止为nopCommerce缓存CSS

IIS / AngularJS单页应用程序-在应用程序中导航时如何防止单个index.html的页面缓存

HTML文件中的AngularDart构建版本可防止缓存新构建

防止RAP中drawImage的HTML5 canvas标签的磁盘缓存

如何从Firebase托管中删除html文件?

在服务工作者中服务之前,可以编辑缓存的index.html吗?