开发者社区 问答 正文

跨域资源共享之OptionObject?

浏览器在发送跨域请求之前会发送一个preflight请求(OPTIONS)并带上特定的来源域,HTTP方法和header信息等给OSS以决定是否发送真正的请求。 OSS可以通过Put Bucket cors接口来开启Bucket的CORS支持,开启CORS功能之后,OSS在收到浏览器preflight请求时会根据设定的规则评估是否允许本次请求。如果不允许或者CORS功能没有开启,返回403 Forbidden。

请求语法OPTIONS /ObjectName HTTP/1.1
Host: BucketName.oss-cn-hangzhou.aliyuncs.com
Origin:Origin
Access-Control-Request-Method:HTTP method
Access-Control-Request-Headers:Request Headers





请求Header

名称描述
Origin请求来源域,用来标示跨域请求。 类型:字符串 默认值:无
Access-Control-Request-Method表示在实际请求中将会用到的方法。 类型:字符串 默认值:无
Access-Control-Request-Headers表示在实际请求中会用到的除了简单头部之外的headers。 类型:字符串 默认值:无


响应Header

名称描述
Access-Control-Allow-Origin请求中包含的Origin,如果不允许的话将不包含该头部。 类型:字符串
Access-Control-Allow-Methods允许请求的HTTP方法,如果不允许该请求,则不包含该头部。 类型:字符串
Access-Control-Allow-Headers允许请求携带的header的列表,如果请求中有不被允许的header,则不包含该头部,请求也将被拒绝。 类型:字符串
Access-Control-Expose-Headers允许在客户端JavaScript程序中访问的headers的列表。 类型:字符串
Access-Control-Max-Age允许浏览器缓存preflight结果的时间,单位为秒 类型:整型


示例


[backcolor=transparent]请求示例: OPTIONS /testobject HTTP/1.1
Host: oss-example.oss-cn-hangzhou.aliyuncs.com  
Date: Fri, 24 Feb 2012 05:45:34 GMT  
Origin:http://www.example.com
Access-Control-Request-Method:PUT
Access-Control-Request-Headers:x-oss-test


[backcolor=transparent]返回示例: HTTP/1.1 200 OK
x-oss-request-id: 5051845BC4689A033D0022BC
Date: Fri, 24 Feb 2012 05:45:34 GMT
Access-Control-Allow-Origin: http://www.example.com
Access-Control-Allow-Methods: PUT
Access-Control-Expose-Headers: x-oss-test
Connection: keep-alive
Content-Length: 0  
Server: AliyunOSS

展开
收起
青衫无名 2017-10-23 10:05:27 1700 分享 版权
阿里云 AI 助理回答

要解决浏览器发送跨域OPTIONS请求至OSS时遇到的403 Forbidden问题,确保OSS正确响应并允许跨域请求,您需要按照以下步骤配置Bucket的CORS规则:

  1. 登录阿里云OSS管理控制台: 首先,登录到您的阿里云账号,并进入OSS管理控制台。

  2. 选择目标Bucket: 在Bucket列表中找到您希望配置CORS的Bucket,并点击该Bucket名称进入详情页面。

  3. 配置CORS规则

    • 转到“数据安全”或直接搜索“跨域设置”功能。
    • 点击“添加CORS规则”或编辑现有规则。
    • 配置规则以允许特定的来源域(Origin)、HTTP方法(如PUT、GET等)和请求头(如自定义的x-oss-test1)。
      • Allowed Origins:应包含来自请求中的Origin头部指定的所有有效源域名,例如http://www.example.com
      • Allowed Methods:至少应包含预检请求(OPTIONS)以及实际请求将使用的HTTP方法,如PUTGET等。
      • Allowed Headers:列出浏览器在预检请求中可能携带的所有非简单请求头,例如x-oss-test1,x-oss-test2
      • 可选地,您可以设置Access-Control-Max-Age来指定浏览器缓存预检请求结果的时间,减少后续相同类型请求的预检次数。
    • 保存配置。

完成上述配置后,OSS会在收到preflight OPTIONS请求时,根据设定的CORS规则评估请求是否被允许。如果请求符合规则,OSS会返回带有相应Access-Control-Allow-*头部的响应,从而允许浏览器继续进行实际的跨域请求。例如,响应中应包含与请求Origin匹配的Access-Control-Allow-Origin头部,允许的HTTP方法列表通过Access-Control-Allow-Methods头部指示,以及允许的自定义请求头通过Access-Control-Allow-Headers头部列出。

务必注意,配置变更可能需要一定时间才能在全球范围内生效,请在调整后给予适当时间验证效果。如果问题依旧,请检查配置细节或咨询阿里云技术支持。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答