为什么对签名URL的缓存控制失败?

时间:2019-06-06 17:53:12

标签: google-cloud-platform google-cloud-storage

我正在尝试使用签名URL V2创建一个包含cache-control标头的签名URL。

当我创建这样的URL时,该URL有效且有效。

        String signature = "PUT" + "\n" +
                "\n" +
                contentType + "\n" +
                expiresWhen + "\n" +
                "x-goog-acl:public-read" + "\n" +
                path;

但是当我添加cache-control标头时,尝试上传时得到403:

        String signature = "PUT" + "\n" +
                "\n" +
                contentType + "\n" +
                expiresWhen + "\n" +
                "cache-control:public,max-age=600" + "\n" +
                "x-goog-acl:public-read" + "\n" +
                path;

我唯一更改的是标题。标头按字母排序,不包含空格,并用“ \ n”分隔,因此应满足所有要求。还是我在这里弄错了?我假设public,max-age必须保持此顺序并且不能排序。如果在上传时指定相同,可能很好。

然后我发现了这个问题Google Cloud Storage set cache-control with signed urls upload,但是我认为它不适用,因为我们是从服务器而不是从浏览器上传的。我的假设正确吗?

1 个答案:

答案 0 :(得分:0)

在后端启用签名URL处理后,Cloud CDN会对带有签名URL的请求进行特殊处理。具体来说,具有签名查询参数的请求被视为已签名。收到此类请求后,Cloud CDN会验证以下内容:

HTTP方法是GET或HEAD。 Expires参数设置为将来的时间。 请求的签名与使用命名键计算的签名匹配。

如果这些检查中的任何一个失败,则将提供403禁止响应。

当我们阅读John Hanley的评论时,如果您使用的是CDN,则签名URL的Cache-Control将被忽略。 我附上下一个链接:

https://cloud.google.com/cdn/docs/using-cdn