您可以通过 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();
关于跨域资源共享的更多信息,请参见跨域访问设置。