Ruby跨域资源共享

因浏览器的同源策略限制,在不同域名之间进行数据交互或者资源共享时,会出现跨域请求被拒绝的问题。您可以通过设置允许特定的域名、方法和请求头的跨域访问策略,解决跨域问题。

设置跨域资源共享规则

以下代码用于设置指定存储空间的跨域资源共享规则:

require 'aliyun/oss'

client = Aliyun::OSS::Client.new(
  # Endpoint以华东1(杭州)为例,其它Region请按实际情况填写。
  endpoint: 'https://oss-cn-hangzhou.aliyuncs.com',
  # 从环境变量中获取访问凭证。运行本代码示例之前,请确保已设置环境变量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
  access_key_id: ENV['OSS_ACCESS_KEY_ID'],
  access_key_secret: ENV['OSS_ACCESS_KEY_SECRET']
)

# 填写Bucket名称,例如examplebucket。
bucket = client.get_bucket('examplebucket')
# 设置跨域资源共享规则。
bucket.cors = [
    Aliyun::OSS::CORSRule.new(
      # 指定允许跨域请求的来源,例如http://example.com。
      :allowed_origins => ['http://example.com', 'http://example.net'],
      # 指定允许的跨域请求的HTTP方法(GET/PUT/DELETE/POST/HEAD)。
      :allowed_methods => ['PUT', 'POST', 'GET'],
      # 在OPTIONS预取指令中允许的header,例如x-oss-test。
      :allowed_headers => ['x-oss-test'],
      # 指定允许用户从应用程序中访问的响应头。
      :expose_headers => ['x-oss-test1'],
      # 指定浏览器对特定资源的预取(OPTIONS)请求返回结果的缓存时间,单位为秒。
      :max_age_seconds => 100)
]

获取跨域资源共享规则

以下代码用于获取跨域资源共享规则:

require 'aliyun/oss'

client = Aliyun::OSS::Client.new(
  # Endpoint以华东1(杭州)为例,其它Region请按实际情况填写。
  endpoint: 'https://oss-cn-hangzhou.aliyuncs.com',
    # 从环境变量中获取访问凭证。运行本代码示例之前,请确保已设置环境变量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
  access_key_id: ENV['OSS_ACCESS_KEY_ID'],
  access_key_secret: ENV['OSS_ACCESS_KEY_SECRET']
)

# 填写Bucket名称,例如examplebucket。
bucket = client.get_bucket('examplebucket')
cors = bucket.cors
puts cors.map(&:to_s)

删除跨域资源共享规则

以下代码用于删除指定存储空间的所有跨域资源共享规则:

require 'aliyun/oss'

client = Aliyun::OSS::Client.new(
  # Endpoint以华东1(杭州)为例,其它Region请按实际情况填写。
  endpoint: 'https://oss-cn-hangzhou.aliyuncs.com',
  # 从环境变量中获取访问凭证。运行本代码示例之前,请确保已设置环境变量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
  access_key_id: ENV['OSS_ACCESS_KEY_ID'],
  access_key_secret: ENV['OSS_ACCESS_KEY_SECRET']
)

# 填写Bucket名称,例如examplebucket。
bucket = client.get_bucket('examplebucket')
bucket.cors = []

相关文档

  • 关于设置跨域资源共享规则的API接口说明,请参见PutBucketCors

  • 关于获取跨域资源共享规则的API接口说明,请参见GetBucketCors

  • 关于删除跨域资源共享规则的API接口说明,请参见DeleteBucketCors