全部产品
弹性计算 会员服务 网络 安全 移动云 数加·大数据分析及展现 数加·大数据应用 管理与监控 云通信 阿里云办公 培训与认证 更多
存储与CDN 数据库 域名与网站(万网) 应用服务 数加·人工智能 数加·大数据基础服务 互联网中间件 视频服务 开发者工具 解决方案 物联网 智能硬件
对象存储 OSS

跨域资源共享

更新时间:2018-05-23 23:45:42

跨域资源共享(CORS)允许Web端的应用程序访问不属于本域的资源。您可以使用OSS提供的接口控制跨域访问的权限。

更多关于跨域资源共享的内容,请参见 跨域访问

设定跨域资源共享(CORS)规则

以下代码用于在指定的存储空间上设定一个跨域资源共享的规则。已存在的规则将被覆盖。

  1. // Endpoint以杭州为例,其它Region请按实际情况填写。
  2. String endpoint = "http://oss-cn-hangzhou.aliyuncs.com";
  3. // 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号
  4. String accessKeyId = "<yourAccessKeyId>";
  5. String accessKeySecret = "<yourAccessKeySecret>";
  6. String bucketName = "<yourBucketName>";
  7. // 创建OSSClient实例。
  8. OSSClient ossClient = new OSSClient(endpoint, accessKeyId, accessKeySecret);
  9. SetBucketCORSRequest request = new SetBucketCORSRequest(bucketName);
  10. //CORS规则的容器,每个Bucket最多允许10条规则。
  11. ArrayList<CORSRule> putCorsRules = new ArrayList<CORSRule>();
  12. CORSRule corRule = new CORSRule();
  13. ArrayList<String> allowedOrigin = new ArrayList<String>();
  14. //指定允许跨域请求的来源。
  15. allowedOrigin.add( "http://www.b.com");
  16. ArrayList<String> allowedMethod = new ArrayList<String>();
  17. //指定允许的跨域请求方法(GET/PUT/DELETE/POST/HEAD)。
  18. allowedMethod.add("GET");
  19. ArrayList<String> allowedHeader = new ArrayList<String>();
  20. //控制在预取指令(OPTIONS)中Access-Control-Request-Headers头中指定的Header是否允许。
  21. allowedHeader.add("x-oss-test");
  22. ArrayList<String> exposedHeader = new ArrayList<String>();
  23. //指定允许用户从应用程序中访问的响应头。
  24. exposedHeader.add("x-oss-test1");
  25. //最多支持一个*通配符
  26. corRule.setAllowedMethods(allowedMethod);
  27. corRule.setAllowedOrigins(allowedOrigin);
  28. corRule.setAllowedHeaders(allowedHeader);
  29. corRule.setExposeHeaders(exposedHeader);
  30. //指定浏览器对特定资源的预取(OPTIONS)请求返回结果的缓存时间,单位为秒。
  31. corRule.setMaxAgeSeconds(10);
  32. //最多允许10条规则。
  33. putCorsRules.add(corRule);
  34. request.setCorsRules(putCorsRules);
  35. ossClient.setBucketCORS(request);
  36. // 关闭Client。
  37. ossClient.shutdown();

AllowedOrigins和AllowedMethods最多支持一个*通配符。*表示允许所有的域来源或者操作。而AllowedHeaders和ExposeHeaders不支持通配符。

获取跨域资源共享(CORS)规则

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

  1. // Endpoint以杭州为例,其它Region请按实际情况填写。
  2. String endpoint = "http://oss-cn-hangzhou.aliyuncs.com";
  3. // 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号
  4. String accessKeyId = "<yourAccessKeyId>";
  5. String accessKeySecret = "<yourAccessKeySecret>";
  6. String bucketName = "<yourBucketName>";
  7. // 创建OSSClient实例。
  8. OSSClient ossClient = new OSSClient(endpoint, accessKeyId, accessKeySecret);
  9. ArrayList<CORSRule> corsRules;
  10. //获取CORS规则列表。
  11. corsRules = (ArrayList<CORSRule>) ossClient.getBucketCORSRules(bucketName);
  12. for (CORSRule rule : corsRules) {
  13. for (String allowedOrigin1 : rule.getAllowedOrigins()) {
  14. //获取允许跨域请求源。
  15. System.out.println(allowedOrigin1);
  16. }
  17. for (String allowedMethod1 : rule.getAllowedMethods()) {
  18. //获取允许跨域请求方法。
  19. System.out.println(allowedMethod1);
  20. }
  21. if (rule.getAllowedHeaders().size() > 0){
  22. for (String allowedHeader1 : rule.getAllowedHeaders()) {
  23. //获取允许头部列表。
  24. System.out.println(allowedHeader1);
  25. }
  26. }
  27. if (rule.getExposeHeaders().size() > 0) {
  28. for (String exposeHeader : rule.getExposeHeaders()) {
  29. //获取允许头部。
  30. System.out.println(exposeHeader);
  31. }
  32. }
  33. if ( null != rule.getMaxAgeSeconds()) {
  34. System.out.println(rule.getMaxAgeSeconds());
  35. }
  36. }
  37. // 关闭Client。
  38. ossClient.shutdown();

删除跨域资源共享(CORS)规则

以下代码用于删除指定存储空间下所有跨域资源共享的规则:

  1. // Endpoint以杭州为例,其它Region请按实际情况填写。
  2. String endpoint = "http://oss-cn-hangzhou.aliyuncs.com";
  3. // 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号。
  4. String accessKeyId = "<yourAccessKeyId>";
  5. String accessKeySecret = "<yourAccessKeySecret>";
  6. String bucketName = "<yourBucketName>";
  7. // 创建OSSClient实例。
  8. OSSClient ossClient = new OSSClient(endpoint, accessKeyId, accessKeySecret);
  9. // 清空Bucket的CORS规则。
  10. ossClient.deleteBucketCORSRules(bucketName);
  11. // 关闭Client。
  12. ossClient.shutdown();
本文导读目录