ffx*_*sam 35 amazon-s3 amazon-web-services amazon-cloudfront
我在S3存储桶上托管了一个React应用程序.使用yarn build
(这是一个基于create-react-app的应用程序)缩小代码.该build
文件夹看起来像:
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
Run Code Online (Sandbox Code Playgroud)
我永远不想index.html
被缓存,因为如果我更新代码(导致十六进制后缀main.*.js
更新),我需要用户下次访问以获取<script src>
更改index.html
以指向更新的代码.
在CloudFront中,我似乎只能排除路径,排除"/"似乎无法正常工作.我得到奇怪的行为,我更改代码,如果我打刷新,我看到它,但如果我退出Chrome和回去,我看到非常过时代码的某些原因.
我不想在每个代码版本上触发失效(通过CodeBuild).还有其他方法吗?我认为,挑战之一是,因为这是使用路由器作出反应的应用程序,我在用错误的文件设置为做一些挂羊头卖狗肉index.html
,并迫使HTTP状态200,而不是403.
Luk*_*son 35
如果您不想index.html
缓存,请Cache-Control: max-age=0
仅在该文件上设置标题.CloudFront会在每次请求时向您的原始S3存储桶发出请求,但听起来这是期望的行为.
如果您希望设置更长的到期时间并手动使CloudFront缓存无效,则可以使用*
或/*
作为失效路径(不是/
您提到的那样).但是,全球所有CloudFront边缘节点最多可能需要15分钟来反映原点的变化.
sez*_*443 16
基于CloudFront配置的解决方案:
转到“行为”选项卡下的CloudFront分配,并创建新行为。指定以下值:
保存此配置。
CloudFront将不再缓存index.html
。
cha*_*mre 10
以下是我在将新文件上传到s3并使Cloudfront无效后,在我的index.html文件上设置缓存控制的命令:
aws s3 cp s3://bucket/index.html s3://bucket/index.html --metadata-directive REPLACE --cache-control max-age=0
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
8890 次 |
最近记录: |