我有一个S3存储桶上托管的React应用程序。代码使用yarn build
缩小(这是一个基于创建反应的应用程序)。该build
文件夹看起来像:如何让CloudFront永不缓存S3存储桶上的index.html
build
├── asset-manifest.json
├── favicon.ico
├── images
│ ├── map-background.png
│ └── robot-icon.svg
├── index.html
├── js
│ ├── fontawesome.js
│ ├── packs
│ │ ├── brands.js
│ │ ├── light.js
│ │ ├── regular.js
│ │ └── solid.js
│ └── README.md
├── service-worker.js
└── static
├── css
│ ├── main.bf27c1d9.css
│ └── main.bf27c1d9.css.map
└── js
├── main.8d11d7ab.js
└── main.8d11d7ab.js.map
我再也不想index.html
被缓存,因为如果我更新的代码(使进制后缀main.*.js
更新),我需要的用户下次访问回暖的<script src>
更改为index.html
指向更新的代码。
在CloudFront中,我似乎只能排除路径,排除“/”似乎不能正常工作。我在更改代码时遇到了奇怪的行为,如果我刷新了,我会看到它,但如果我退出Chrome并返回,出于某种原因,我看到过时的代码。
我不想在每个代码版本(通过CodeBuild)触发无效。有没有其他的方法?我认为其中一个挑战是,由于这是一个使用React Router的应用程序,我必须通过将错误文档设置为index.html
并强制HTTP状态200而不是403来做一些诡计。
你是在谈论在S3对象元数据中添加该头文件吗?而且,无论URL路径如何,我都不希望index.html缓存。我更关心缓存相关文件(JS文件,CSS,图像)。 – ffxsam
是的:它在AWS文档中被称为“系统定义的元数据”:http://docs.aws.amazon.com/AmazonS3/latest/user-guide/add-object-metadata.html –
很好,这是有帮助!在复制索引文件时,我已经设置了我的部署过程以使用'aws s3 cp --cache-control max-age = 0'。奇迹般有效。 – ffxsam