是否可以在Amazon S3上使用任意命名自定义标头?
例如,我使用指向Amazon S3的CDN作为源服务器,并且为了在CDN上启用高级功能,我需要使用自定义标头“x-something-something”......
我认为用“x-amz-meta-(某事)”可以做到这一点但是如果没有amz那么更像“x-(某事) - (某事)”这样的东西怎么办呢?
答案 0 :(得分:14)
我认为current API不可能。它们涵盖了缓存和浏览器互操作性所需的主要标题。
我认为他们在允许x-amz-meta-
前缀自定义标头时是安全的,可能会在将来更新其api时不与用户选择的标头发生冲突。
如果您需要附加到对象的自定义属性,则在客户端应用程序中解析x-amz-meta-
应该是微不足道的。
答案 1 :(得分:11)
这篇精美的文章解释了这一切 https://medium.com/@tom.cook/edge-lambda-cloudfront-custom-headers-3d134a2c18a2
tldr:
你不能只用s3做。您需要通过 Lambda @ Edge 使用Cloudfront和lambda。它是Lambda和CloudFront之间的集成。它允许您在CloudFront中运行Lambdas。这允许您更改标题等。因此,如果您可以通过CloudFront访问您的s3,那么这可能是一个可行的选择。
答案 2 :(得分:0)
我能够使用s3cmd tool实现这一目标。我编写了一个同步脚本,它使用AWS客户端工具上的--cache-control
参数同步我的静态站点,然后手动重置它并为一些特定文件添加一些其他标题:
cd / appropriatedirectory
#删除当前站点
aws s3 rm s3:// yourbucket --recursive --exclude'logs / *'#上传新网站,为所有文件设置缓存标头为1个月 aws s3同步。 s3:// yourbucket --exclude'.idea / *'--exclude'.git / *' - exclude'.gitignore'-- cache-control max-age = 2592000
#覆盖某些文件的缓存头 python / pathToS3cmd / s3cmd modify --add-header =“Cache-Control:no-cache,no-store,must-revalidate”s3://yourbucket/somefile.html
python / pathToS3cmd / s3cmd / s3cmd modify --add-header =“Expires:0”s3://yourbucket/somefile.html
python / pathToS3cmd / s3cmd / s3cmd modify --add-header =“Pragma:no-cache”s3://yourbucket/somefile.html