跨域提示与访问权限不是同一个开关
网站页面从对象存储读取资料时,看到跨域相关提示,容易把所有读取失败都归到CORS设置上。即使某条跨域规则已经匹配,也不能据此认定当前请求必然有权读取文件。浏览器是否允许页面使用跨来源响应,与资源端是否向该请求提供内容,需要分别核对。
阿里云OSS的PutBucketCors说明介绍了按来源、请求方法和请求头匹配规则的条件,并说明处理时还会进行相应权限检查。这里引用的是流程区别,不提供适用于所有站点的一套通配配置。
将一次请求拆成两组事实
设一个虚构场景:资料页所在来源已在允许规则中,但它读取的说明文件属于私有对象,本次请求并未满足相应授权条件。允许这个网站来源,并不自动给页面访客授予该文件的阅读权限。反过来,一个获授权工具能下载文件,也不能单独证明浏览器中的跨源条件已经配置正确。
排查时由有权限的维护者记录页面实际来源、目标对象、请求方法、必要响应状态和脱敏错误信息。来源中的协议、主机或端口不应凭页面名称猜测;对象路径也应核对到具体请求,而不是看某个同名文件可以打开就宣布问题消失。
不要为消除报错而扩大公开范围
如果是跨源条件不匹配,应在既有业务需求内讨论最小调整;如果是资源授权问题,应回到访问身份和对象权限核实。不能为了让浏览器马上成功,就将私有资料改成公开,或把所有来源、方法和资源不加区分地放开。
修改规则还需注意覆盖已有配置的行为,保留当前配置和经过批准的变更说明。最后分别验证需要的请求可用、不应开放的访问仍受限制。本文仅说明检查思路,没有改动服务器或存储策略;单次成功响应也不是对全部资料权限的完整审计结论。