Node.js跨域资源共享

跨域资源共享(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