You need to enable JavaScript to run this app.
导航
管理跨域资源共享(Python SDK)
最近更新时间:2024.02.04 18:31:03首次发布时间:2023.01.19 17:25:20

设置跨域访问 CORS(Cross-Origin Resource Sharing)规则,当 TOS 收到跨域请求或 OPTIONS 请求时,会读取存储桶对应的 CORS 规则,进行相应的权限检查并返回相应的 Header,保证跨域传输数据的安全性。本文介绍如何配置桶的跨区域资源共享。

设置跨域资源共享规则

注意

要为桶设置跨域资源共享规则,您必须具备 tos:PutBucketCORS 权限,具体操作请参见权限配置指南

示例代码

以下代码用于设置桶 bucket-test 的跨域资源共享规则。

import os
import tos

from tos.models2 import CORSRule

# 从环境变量获取 AK 和 SK 信息。
ak = os.getenv('TOS_ACCESS_KEY')
sk = os.getenv('TOS_SECRET_KEY')
# your endpoint 和 your region 填写Bucket 所在区域对应的Endpoint。# 以华北2(北京)为例,your endpoint 填写 tos-cn-beijing.volces.com,your region 填写 cn-beijing。
endpoint = "your endpoint"
region = "your region"
bucket_name = "bucket-test"

try:
    # 创建 TosClientV2 对象,对桶和对象的操作都通过 TosClientV2 实现
    client = tos.TosClientV2(ak, sk, endpoint, region)

    rule = CORSRule(allowed_origins=['*'],
                    allowed_methods=['GET', 'HEAD'],
                    allowed_headers=['*'],
                    max_age_seconds=1000)

    # 已存在的规则将被覆盖
    client.put_bucket_cors(bucket_name, [rule])
except tos.exceptions.TosClientError as e:
    # 操作失败,捕获客户端异常,一般情况为非法请求参数或网络异常
    print('fail with client error, message:{}, cause: {}'.format(e.message, e.cause))
except tos.exceptions.TosServerError as e:
    # 操作失败,捕获服务端异常,可从返回信息中获取详细错误信息
    print('fail with server error, code: {}'.format(e.code))
    # request id 可定位具体问题,强烈建议日志中保存
    print('error with request id: {}'.format(e.request_id))
    print('error with message: {}'.format(e.message))
    print('error with http code: {}'.format(e.status_code))
    print('error with ec: {}'.format(e.ec))
    print('error with request url: {}'.format(e.request_url))
except Exception as e:
    print('fail with unknown error: {}'.format(e))

获取跨域资源共享规则

注意

要获取桶的跨域资源共享规则,您必须具备 tos:GetBucketCORS 权限,具体操作请参见权限配置指南

示例代码

以下代码用于获取桶 bucket-test 的跨域资源共享规则。

import os
import tos

from tos.models2 import CORSRule

# 从环境变量获取 AK 和 SK 信息。
ak = os.getenv('TOS_ACCESS_KEY')
sk = os.getenv('TOS_SECRET_KEY')
# your endpoint 和 your region 填写Bucket 所在区域对应的Endpoint。# 以华北2(北京)为例,your endpoint 填写 tos-cn-beijing.volces.com,your region 填写 cn-beijing。
endpoint = "your endpoint"
region = "your region"
bucket_name = "bucket-test"

try:
    client = tos.TosClientV2(ak, sk, endpoint, region)
    # 若未设置跨域资源共享规则将抛出 tos.exceptions.TosServerError
    cors = client.get_bucket_cors(bucket_name)
    for rule in cors.cors_rules:
        print('AllowedOrigins={}'.format(rule.allowed_origins))
        print('AllowedMethods={}'.format(rule.allowed_methods))
        print('AllowedHeaders={}'.format(rule.allowed_headers))
        print('ExposeHeaders={}'.format(rule.expose_headers))
        print('MaxAgeSeconds={}'.format(rule.max_age_seconds))
except tos.exceptions.TosClientError as e:
    # 操作失败,捕获客户端异常,一般情况为非法请求参数或网络异常
    print('fail with client error, message:{}, cause: {}'.format(e.message, e.cause))
except tos.exceptions.TosServerError as e:
    # 操作失败,捕获服务端异常,可从返回信息中获取详细错误信息
    print('fail with server error, code: {}'.format(e.code))
    # request id 可定位具体问题,强烈建议日志中保存
    print('error with request id: {}'.format(e.request_id))
    print('error with message: {}'.format(e.message))
    print('error with http code: {}'.format(e.status_code))
    print('error with ec: {}'.format(e.ec))
    print('error with request url: {}'.format(e.request_url))
except Exception as e:
    print('fail with unknown error: {}'.format(e))

删除跨域资源共享规则

注意

要删除桶的跨域资源共享规则,您必须具备 tos:PutBucketCORS 权限,具体操作请参见权限配置指南

示例代码

以下代码用于删除指定桶的跨域资源共享规则。

import os
import tos

# 从环境变量获取 AK 和 SK 信息。
ak = os.getenv('TOS_ACCESS_KEY')
sk = os.getenv('TOS_SECRET_KEY')
# your endpoint 和 your region 填写Bucket 所在区域对应的Endpoint。# 以华北2(北京)为例,your endpoint 填写 tos-cn-beijing.volces.com,your region 填写 cn-beijing。
endpoint = "your endpoint"
region = "your region"
bucket_name = "bucket-test"

try:
    # 创建 TosClientV2 对象,对桶和对象的操作都通过 TosClientV2 实现
    client = tos.TosClientV2(ak, sk, endpoint, region)
    # 删除桶的跨域资源共享配置项
    client.delete_bucket_cors(bucket_name)
except tos.exceptions.TosClientError as e:
    # 操作失败,捕获客户端异常,一般情况为非法请求参数或网络异常
    print('fail with client error, message:{}, cause: {}'.format(e.message, e.cause))
except tos.exceptions.TosServerError as e:
    # 操作失败,捕获服务端异常,可从返回信息中获取详细错误信息
    print('fail with server error, code: {}'.format(e.code))
    # request id 可定位具体问题,强烈建议日志中保存
    print('error with request id: {}'.format(e.request_id))
    print('error with message: {}'.format(e.message))
    print('error with http code: {}'.format(e.status_code))
    print('error with ec: {}'.format(e.ec))
    print('error with request url: {}'.format(e.request_url))
except Exception as e:
    print('fail with unknown error: {}'.format(e))

相关文档

关于跨域资源共享的更多信息,请参见跨域访问设置