在亚马逊S3上,是否可以使用任意命名的自定义标头?
例如,我正在使用指向亚马逊S3作为源服务器的CDN,并且为了在CDN上启用高级功能,我需要使用一个自定义标头x-something-something
...
我看到可以使用x-amz-meta-(something)
来实现此目的,但是对于没有amz
的x-(something)-(something)
这样的通用名称怎么办?
在亚马逊S3上,是否可以使用任意命名的自定义标头?
例如,我正在使用指向亚马逊S3作为源服务器的CDN,并且为了在CDN上启用高级功能,我需要使用一个自定义标头x-something-something
...
我看到可以使用x-amz-meta-(something)
来实现此目的,但是对于没有amz
的x-(something)-(something)
这样的通用名称怎么办?
这篇精美的文章详细解释了一切:如何使用Lambda@Edge在CloudFront/S3上提供自定义头部
tldr:
你不能只用S3来做到这一点。你需要通过Lambda@Edge使用CloudFront和Lambda进行整合。它是Lambda和CloudFront之间的集成。它允许你在CloudFront内运行Lambda,这样就可以更改标题等内容。因此,如果你可以通过CloudFront访问你的S3,则这可能是一个可行的选项。
我认为使用他们目前的API是不可能的。该API覆盖了你需要进行缓存和浏览器互操作所需的主要头信息。
我认为他们只允许以x-amz-meta-
为前缀的自定义标头,可能是为了避免在将来更新其API时与用户选择的标头发生冲突而保持安全。
如果您需要将自定义属性附加到对象上,则在客户端应用程序中解析出x-amz-meta-
应该很容易。
x-amz-meta-
前缀解决了这个问题(这是亚马逊文档中记录不够清晰的事实)。 - Frederic--cache-control
参数来同步我的静态网站,然后手动重置并为一些特定文件添加其他几个标头:
cd /合适的目录
# 删除当前网站 aws s3 rm s3://你的bucket --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