如何基于HTTP头过滤Google Cloud Storage请求?拦截无Range头请求
可行,具体实现如下
Google Cloud Storage(GCS)的安全规则确实支持访问HTTP请求头,你可以通过request.headers对象检查请求是否携带Range头,从而过滤掉未携带该头的GET请求。
安全规则示例
针对存储COG文件的特定路径(比如/cogs/{filename}),编写如下规则:
rules_version = '2'; service firebase.storage { match /b/{bucket}/o { # 匹配所有COG文件所在路径 match /cogs/{filename} { # 仅允许携带Range请求头的GET请求 allow get: if request.headers.range != null; } } }
关键说明
- 请求头在规则中以小写形式存在:不管客户端发送的是
Range还是range,规则里都用request.headers.range访问,因为GCS会统一将头名称转为小写处理。 - 基础检查足够满足需求:你提到不在意通过构造范围请求下载完整文件,所以只需检查
Range头存在即可。如果需要更严格的格式校验,可添加正则匹配:allow get: if request.headers.range != null && request.headers.range.matches('^bytes=\\d+-\\d*$');
测试方法
由于Firebase规则游乐场无法模拟自定义HTTP请求头,需用实际HTTP工具测试:
- 允许的请求(带Range头):
会返回206 Partial Content响应。curl -H "Range: bytes=0-1023" https://storage.googleapis.com/[你的桶名]/cogs/[目标文件名] - 被拒绝的请求(不带Range头):
会返回403 Forbidden响应,符合过滤需求。curl https://storage.googleapis.com/[你的桶名]/cogs/[目标文件名]
内容的提问来源于stack exchange,提问作者gtnbssn
相关产品推荐
相关产品推荐

