我在Amazon S3上托管文件,我希望使用预先签名的URL进行访问.
对于简单的GET请求,这非常有效.然而,有一些客户端首先执行HEAD请求(以检索文件大小).由于URL中的签名包括http动词(GET vs HEAD),因此头部请求失败.
客户只需:
HEAD http://(bucketname).s3.amazonaws.com/filename?AWSAccessKeyId=(mykey)&Expires=(timestamp)&Signature=(sig)
GET http://(bucketname).s3.amazonaws.com/filename?AWSAccessKeyId=(mykey)&Expires=(timestamp)&Signature=(sig)
Run Code Online (Sandbox Code Playgroud)
我不能改变客户端使用不同的URL来获取头部.有没有办法让亚马逊使用同一资源接受HEAD和GET的签名?
okr*_*asz 10
如果仅为第一个字节指定标头,也可以模拟HEAD行为.不同之处在于您收到的不是代码.其次全尺寸将在标题中.GETRange206200Content-Range
curl -H "Range: bytes=0-0" <URL>
号的HEAD和GET需要不同的签名,有签名中输入细微的差别.
不确定您使用什么来生成预签名的身份验证URL,但我知道一些官方AWS SDK处理此问题,而其他人尚未处理.
在朋友的帮助下,我找到了一个适合我的解决方案:在我的服务器上代理HEAD请求,并重定向到GET请求.
当一个请求带有HEAD动词来获取文件信息时,我在我的服务器上使用我的S3代码来获取HEAD信息,然后我自己将它发送回请求者.
当请求带有GET动词以获取文件本身时,我会使用预先签名的URL进行302重定向.
这非常适合处理HEAD和GET而不需要预先签名.我只预先签署了实际文件的GET请求.
| 归档时间: |
|
| 查看次数: |
2951 次 |
| 最近记录: |