You need to enable JavaScript to run this app.
导航

管理跨域资源共享(C++ SDK)

最近更新时间2024.02.04 18:31:04

首次发布时间2023.01.29 15:35:46

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

设置跨域资源共享规则

注意

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

示例代码

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

#include "TosClientV2.h"
using namespace VolcengineTos;

int main(void){
    // 初始化 TOS 账号信息
    // Your Region 填写 Bucket 所在 Region
    std::string region = "Your Region";
    std::string accessKey = std::getenv("TOS_ACCESS_KEY");
    std::string secretKey = std::getenv("TOS_SECRET_KEY");
    // 填写 Bucket 名称,例如 examplebucket
    std::string bucketName = "examplebucket";
    
    // 初始化网络等资源
    InitializeClient();
    // 创建交互的 client
    TosClientV2 client(region, accessKey, secretKey);
    
    // 设置桶的跨域资源共享
    PutBucketCORSInput input(bucketName);
    // 设置跨域资源共享规则
    CORSRule rule1;
    // 指定允许跨域请求的来源。* 表示允许所有请求。
    rule1.addAllowedOrigin("*");
    // 指定允许跨域请求方法(GET/PUT/POST/DELETE/HEAD)
    rule1.setAllowedMethods({"GET","PUT"});
    // 设置请求可以使用哪些自定义的 HTTP 请求头部
    rule1.setAllowedHeaders({"header1", "header2"});
    // 设置浏览器可以接收到的来自服务器端的自定义头部信息
    rule1.setExposeHeaders({"tos-1", "tos-2"});
    // 设置 OPTIONS 请求得到结果的有效期
    rule1.setMaxAgeSeconds(100);
    
    auto rule2 = CORSRule();
    rule2.setAllowedOrigins({"http://example.com", "http://www.volcengine.com"});
    rule2.addAllowedMethod("GET");
    rule2.addAllowedHeader("header1");
    rule2.addExposeHeader("tos-1");
    rule2.setMaxAgeSeconds(100);
    
    // 设置跨域资源共享规则
    std::vector<CORSRule> rules{rule1,rule2};
    input.setRules(rules);

    auto output = client.putBucketCORS(input);
    if (!output.isSuccess()) {
        // 异常处理
        std::cout << "PutBucketCORS failed." << output.error().String() << std::endl;
        // 释放网络等资源
        CloseClient();
        return -1;
    }
    std::cout << "PutBucketCORS success." << std::endl;

    // 释放网络等资源
    CloseClient();
    return 0;
}

获取跨域资源共享规则

注意

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

示例代码

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

#include "TosClientV2.h"
using namespace VolcengineTos;

int main(void){
    // 初始化 TOS 账号信息
    // Your Region 填写 Bucket 所在 Region
    std::string region = "Your Region";
    std::string accessKey = std::getenv("TOS_ACCESS_KEY");
    std::string secretKey = std::getenv("TOS_SECRET_KEY");
    // 填写 Bucket 名称,例如 examplebucket
    std::string bucketName = "examplebucket";
    
    // 初始化网络等资源
    InitializeClient();
    // 创建交互的 client
    TosClientV2 client(region, accessKey, secretKey);
    
    // 获取桶的跨域资源共享规则
    GetBucketCORSInput input(bucketName);
    auto output = client.getBucketCORS(input);
    if (!output.isSuccess()) {
        // 异常处理
        std::cout << "GetBucketCors failed." << output.error().String() << std::endl;
        // 释放网络等资源
        CloseClient();
        return -1;
    }
    
    std::cout << "GetBucketCors success" << std::endl;
    // 查看跨域访问规则详细信息
    for (const auto&  rule : output.result().getRules()) {
        std::cout << "Get Bucket Cors List:" << std::endl;
        for (auto const& origin : rule.getAllowedOrigins()) {
            std::cout << "Allowed origin:" << origin << std::endl;
        }
        for (auto const& header : rule.getAllowedHeaders()) {
            std::cout << "Allowed header:" << header << std::endl;
        }
        for (auto const& header : rule.getExposeHeaders()) {
            std::cout << "Expose header:" << header << std::endl;
        }
        for (auto const& method : rule.getAllowedMethods()) {
            std::cout << "Allowed method:" << method << std::endl;
        }
        std::cout << "Allowed method:" << rule.getMaxAgeSeconds() << std::endl;
    }

    // 释放网络等资源
    CloseClient();
    return 0;
}

删除跨域资源共享规则

注意

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

示例代码

以下代码展示如何删除指定桶的跨域资源共享规则。

#include "TosClientV2.h"
using namespace VolcengineTos;

int main(void){
    // 初始化 TOS 账号信息
    // Your Region 填写 Bucket 所在 Region
    std::string region = "Your Region";
    std::string accessKey = std::getenv("TOS_ACCESS_KEY");
    std::string secretKey = std::getenv("TOS_SECRET_KEY");
    // 填写 Bucket 名称,例如 examplebucket
    std::string bucketName = "examplebucket";
    
    // 初始化网络等资源
    InitializeClient();
    // 创建交互的 client
    TosClientV2 client(region, accessKey, secretKey);
    
    // 删除桶的跨域资源共享
    DeleteBucketCORSInput input(bucketName);
    auto output = client.deleteBucketCORS(input);
    if (!output.isSuccess()) {
        // 异常处理
        std::cout << "DeleteBucketCORS failed." << output.error().String() << std::endl;
        // 释放网络等资源
        CloseClient();
        return -1;
    }
    std::cout << "DeleteBucketCORS success." << std::endl;

    // 释放网络等资源
    CloseClient();
    return 0;
}

相关文档

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