跨域资源共享(Cross-origin resource sharing,简称CORS)允许Web端的应用程序访问不属于本域的资源。OSS提供跨域资源共享接口,方便您控制跨域访问的权限。
设置跨域资源共享规则
以下代码用于为指定Bucket设置跨域资源共享规则:
const OSS = require('ali-oss');
const client = new OSS({
// yourRegion填写Bucket所在地域。以华东1(杭州)为例,Region填写为oss-cn-hangzhou。
region: 'yourRegion',
// 从环境变量中获取访问凭证。运行本代码示例之前,请确保已设置环境变量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
accessKeyId: process.env.OSS_ACCESS_KEY_ID,
accessKeySecret: process.env.OSS_ACCESS_KEY_SECRET,
authorizationV4: true,
// 填写Bucket名称。
bucket: 'yourBucket'
});
const rules = [{
// 指定允许跨域请求的来源,支持通配符星号(*),表示允许所有的来源域。
allowedOrigin: 'http://example.com',
// 指定允许的跨域请求方法,支持GET、PUT、DELETE、POST和HEAD方法。
allowedMethod: 'GET',
// 指定允许跨域请求的响应头。建议无特殊情况下将此项设置为通配符星号(*)。
allowedHeader: '*',
// 指定允许用户从应用程序中访问的响应头,例如一个JavaScript的XMLHttpRequest对象。不允许使用通配符星号(*)。
exposeHeader: 'Content-Length',
// 指定浏览器对特定资源的预取(OPTIONS)请求返回结果的缓存时间,单位为秒。
maxAgeSeconds: '30'
},
];
// 最多允许设置10条跨域资源共享规则。如果配置了相同的规则,则已存在的规则将被覆盖。
client.putBucketCORS("yourBucket", rules).then((r) => {
console.log(r);
});
获取跨域资源共享规则
以下代码用于获取指定Bucket的跨域资源共享规则:
const OSS = require("ali-oss");
const assert = require("assert");
const client = new OSS({
// yourRegion填写Bucket所在地域。以华东1(杭州)为例,Region填写为oss-cn-hangzhou。
region: 'yourRegion',
// 从环境变量中获取访问凭证。运行本代码示例之前,请确保已设置环境变量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
accessKeyId: process.env.OSS_ACCESS_KEY_ID,
accessKeySecret: process.env.OSS_ACCESS_KEY_SECRET,
authorizationV4: true,
// 填写Bucket名称。
bucket: "yourBucket",
});
// 填写Bucket名称。
client.getBucketCORS("yourBucket").then((r) => {
assert.equal(r.res.status, 200);
assert.deepEqual(r.rules, [
{
allowedOrigin: "http://example.com",
allowedMethod: "GET",
allowedHeader: "*",
exposeHeader: "Content-Length",
maxAgeSeconds: "30",
},
]);
});
删除跨域资源共享规则
以下代码用于删除指定Bucket的所有跨域资源共享规则:
const OSS = require('ali-oss');
const client = new OSS({
// yourRegion填写Bucket所在地域。以华东1(杭州)为例,Region填写为oss-cn-hangzhou。
region: 'yourRegion',
// 从环境变量中获取访问凭证。运行本代码示例之前,请确保已设置环境变量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
accessKeyId: process.env.OSS_ACCESS_KEY_ID,
accessKeySecret: process.env.OSS_ACCESS_KEY_SECRET,
authorizationV4: true,
// 填写Bucket名称。
bucket: "yourBucket",
});
// 填写Bucket名称。
client.deleteBucketCORS('yourBucket').then((res) => {
console.log(res);
}).catch(e => {
console.log(e)
})
相关文档
关于跨域资源共享的完整示例代码,请参见GitHub示例。
关于设置跨域资源共享规则的API接口说明,请参见PutBucketCors。
关于获取跨域资源共享规则的API接口说明,请参见GetBucketCors。
关于删除跨域资源共享规则的API接口说明,请参见DeleteBucketCors。