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

管理跨域资源共享(Node.js SDK)

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

首次发布时间2023.12.19 18:47:28

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

设置跨域资源共享

注意

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

示例代码

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

// 导入 SDK, 当 TOS Node.JS SDK 版本小于 2.5.2 请把下方 TosClient 改成 TOS 导入
import { TosClient, TosClientError, TosServerError, HttpMethodType } from '@volcengine/tos-sdk';

// 创建客户端
const client = new TosClient({
  accessKeyId: process.env['TOS_ACCESS_KEY'],
  accessKeySecret: process.env['TOS_SECRET_KEY'],
  region: "Provide your region", // 填写 Bucket 所在地域。以华北2(北京)为例,则 "Provide your region" 填写为 cn-beijing。
  endpoint: "Provide your endpoint", // 填写域名地址
});

function handleError(error) {
  if (error instanceof TosClientError) {
    console.log('Client Err Msg:', error.message);
    console.log('Client Err Stack:', error.stack);
  } else if (error instanceof TosServerError) {
    console.log('Request ID:', error.requestId);
    console.log('Response Status Code:', error.statusCode);
    console.log('Response Header:', error.headers);
    console.log('Response Err Code:', error.code);
    console.log('Response Err Msg:', error.message);
  } else {
    console.log('unexpected exception, message: ', error);
  }
}

const bucketName = 'node-sdk-test-bucket';
async function main() {
  try {
    const corsRule1 = {
      // 设置允许访问的来源,* 表示允许所有请求
      AllowedOrigins: ['*'],
      // 设置允许的方法,例如:GET、PUT、HEAD、POST、DELETE
      AllowedMethods: [HttpMethodType.HttpMethodGet, HttpMethodType.HttpMethodPut],
      // 设置请求可以使用哪些自定义的 HTTP 请求头部
      AllowedHeaders: ['header1', 'header2'],
      // 设置浏览器可以接收到的来自服务器端的自定义头部信息
      ExposeHeaders: ['tos-1', 'tos-2'],
      // 设置 OPTIONS 请求得到结果的有效期
      MaxAgeSeconds: 100,
    };
    const corsRule2 = {
      AllowedOrigins: ['http://example.com', 'http://www.volcengine.com'],
      AllowedMethods: [HttpMethodType.HttpMethodGet, HttpMethodType.HttpMethodPut],
      AllowedHeaders: ['header1', 'header2'],
      ExposeHeaders: ['tos-1', 'tos-2'],
      MaxAgeSeconds: 100,
    };
    const { requestId: putCORSRequestId } = await client.putBucketCORS({
      bucket: bucketName,
      CORSRules: [corsRule1, corsRule2],
    });
    console.log('putBucketCORS Request ID: ', putCORSRequestId);
  } catch (error) {
    handleError(error);
  }
}

main();

获取跨域资源共享配置

注意

设置存储桶设置跨域资源共享规则前,您必须具有 tos:GetBucketCORS 权限,具体操作,请参见权限配置指南

示例代码

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

// 导入 SDK, 当 TOS Node.JS SDK 版本小于 2.5.2 请把下方 TosClient 改成 TOS 导入
import { TosClient, TosClientError, TosServerError } from '@volcengine/tos-sdk';

// 创建客户端
const client = new TosClient({
  accessKeyId: process.env['TOS_ACCESS_KEY'],
  accessKeySecret: process.env['TOS_SECRET_KEY'],
  region: "Provide your region", // 填写 Bucket 所在地域。以华北2(北京)为例,则 "Provide your region" 填写为 cn-beijing。
  endpoint: "Provide your endpoint", // 填写域名地址
});

function handleError(error) {
  if (error instanceof TosClientError) {
    console.log('Client Err Msg:', error.message);
    console.log('Client Err Stack:', error.stack);
  } else if (error instanceof TosServerError) {
    console.log('Request ID:', error.requestId);
    console.log('Response Status Code:', error.statusCode);
    console.log('Response Header:', error.headers);
    console.log('Response Err Code:', error.code);
    console.log('Response Err Msg:', error.message);
  } else {
    console.log('unexpected exception, message: ', error);
  }
}

const bucketName = 'node-sdk-test-bucket';
async function main() {
  try {
    const { data, requestId: getCORSRequestId } = await client.getBucketCORS({
      bucket: bucketName,
    });
    console.log('getBucketCORS Request ID: ', getCORSRequestId);
    console.log('CORS Length:  ', data.CORSRules.length);
    // 查看跨域访问规则详细信息
    for (const rule of data.CORSRules) {
      console.log('cors Rule AllowedOrigins:', rule.AllowedOrigins);
      console.log('cors Rule AllowedHeaders:', rule.AllowedHeaders);
      console.log('cors Rule ExposeHeaders:', rule.ExposeHeaders);
      console.log('cors Rule AllowedMethods:', rule.AllowedMethods);
      console.log('cors Rule MaxAgeSeconds:', rule.MaxAgeSeconds);
    }
  } catch (error) {
    handleError(error);
  }
}

main();

删除跨域资源共享配置

注意

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

示例代码

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

// 导入 SDK, 当 TOS Node.JS SDK 版本小于 2.5.2 请把下方 TosClient 改成 TOS 导入
import { TosClient, TosClientError, TosServerError } from '@volcengine/tos-sdk';

// 创建客户端
const client = new TosClient({
  accessKeyId: process.env['TOS_ACCESS_KEY'],
  accessKeySecret: process.env['TOS_SECRET_KEY'],
  region: "Provide your region", // 填写 Bucket 所在地域。以华北2(北京)为例,则 "Provide your region" 填写为 cn-beijing。
  endpoint: "Provide your endpoint", // 填写域名地址
});

function handleError(error) {
  if (error instanceof TosClientError) {
    console.log('Client Err Msg:', error.message);
    console.log('Client Err Stack:', error.stack);
  } else if (error instanceof TosServerError) {
    console.log('Request ID:', error.requestId);
    console.log('Response Status Code:', error.statusCode);
    console.log('Response Header:', error.headers);
    console.log('Response Err Code:', error.code);
    console.log('Response Err Msg:', error.message);
  } else {
    console.log('unexpected exception, message: ', error);
  }
}

const bucketName = 'node-sdk-test-bucket';
async function main() {
  try {
    const { requestId: deleteCORSRequestId } = await client.deleteBucketCORS({
      bucket: bucketName,
    });
    console.log('deleteBucketCORS Request ID: ', deleteCORSRequestId);
  } catch (error) {
    handleError(error);
  }
}

main();

相关文档

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