本文介绍如何进行跨域资源共享。
跨域资源共享(Cross-origin resource sharing,简称CORS)允许Web端的应用程序访问不属于本域的资源。OSS提供跨域资源共享接口,方便您控制跨域访问的权限。
更多关于跨域资源共享的介绍,请参见开发指南中的设置跨域访问和API参考中PutBucketcors。
设置跨域资源共享规则
以下代码用于设置指定存储空间的跨域资源共享规则:
// Endpoint以杭州为例,其它Region请按实际情况填写。 String endpoint = "http://oss-cn-hangzhou.aliyuncs.com"; // 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://console.cloud.tmall.com 创建RAM账号 String accessKeyId = "<yourAccessKeyId>"; String accessKeySecret = "<yourAccessKeySecret>"; String bucketName = "<yourBucketName>"; // 创建OSSClient实例。 OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret); SetBucketCORSRequest request = new SetBucketCORSRequest(bucketName); // 跨域资源共享规则的容器,每个存储空间最多允许10条规则。 ArrayList<CORSRule> putCorsRules = new ArrayList<CORSRule>(); CORSRule corRule = new CORSRule(); ArrayList<String> allowedOrigin = new ArrayList<String>(); // 指定允许跨域请求的来源。 allowedOrigin.add( "http://example.com"); ArrayList<String> allowedMethod = new ArrayList<String>(); // 指定允许的跨域请求方法(GET/PUT/DELETE/POST/HEAD)。 allowedMethod.add("GET"); ArrayList<String> allowedHeader = new ArrayList<String>(); // 是否允许预取指令(OPTIONS)中Access-Control-Request-Headers头中指定的Header。 allowedHeader.add("x-oss-test"); ArrayList<String> exposedHeader = new ArrayList<String>(); // 指定允许用户从应用程序中访问的响应头。 exposedHeader.add("x-oss-test1"); // AllowedOrigins和AllowedMethods最多支持一个星号(*)通配符。星号(*)表示允许所有的域来源或者操作。 corRule.setAllowedMethods(allowedMethod); corRule.setAllowedOrigins(allowedOrigin); // AllowedHeaders和ExposeHeaders不支持通配符。 corRule.setAllowedHeaders(allowedHeader); corRule.setExposeHeaders(exposedHeader); // 指定浏览器对特定资源的预取(OPTIONS)请求返回结果的缓存时间,单位为秒。 corRule.setMaxAgeSeconds(10); // 最多允许10条规则。 putCorsRules.add(corRule); // 已存在的规则将被覆盖。 request.setCorsRules(putCorsRules); ossClient.setBucketCORS(request); // 关闭OSSClient。 ossClient.shutdown();
获取跨域资源共享规则
以下代码用于获取跨域资源共享规则:
// Endpoint以杭州为例,其它Region请按实际情况填写。 String endpoint = "http://oss-cn-hangzhou.aliyuncs.com"; // 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://console.cloud.tmall.com 创建RAM账号。 String accessKeyId = "<yourAccessKeyId>"; String accessKeySecret = "<yourAccessKeySecret>"; String bucketName = "<yourBucketName>"; // 创建OSSClient实例。 OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret); ArrayList<CORSRule> corsRules; // 获取跨域资源共享规则列表。 corsRules = (ArrayList<CORSRule>) ossClient.getBucketCORSRules(bucketName); for (CORSRule rule : corsRules) { for (String allowedOrigin1 : rule.getAllowedOrigins()) { // 获取允许的跨域请求源。 System.out.println(allowedOrigin1); } for (String allowedMethod1 : rule.getAllowedMethods()) { // 获取允许的跨域请求方法。 System.out.println(allowedMethod1); } if (rule.getAllowedHeaders().size() > 0){ for (String allowedHeader1 : rule.getAllowedHeaders()) { // 获取允许的头部列表。 System.out.println(allowedHeader1); } } if (rule.getExposeHeaders().size() > 0) { for (String exposeHeader : rule.getExposeHeaders()) { // 获取允许的头部。 System.out.println(exposeHeader); } } if ( null != rule.getMaxAgeSeconds()) { System.out.println(rule.getMaxAgeSeconds()); } } // 关闭OSSClient。 ossClient.shutdown();
删除跨域资源共享规则
以下代码用于删除指定存储空间的所有跨域资源共享规则:
// Endpoint以杭州为例,其它Region请按实际情况填写。 String endpoint = "http://oss-cn-hangzhou.aliyuncs.com"; // 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账号进行API访问或日常运维,请登录 https://console.cloud.tmall.com 创建RAM账号。 String accessKeyId = "<yourAccessKeyId>"; String accessKeySecret = "<yourAccessKeySecret>"; String bucketName = "<yourBucketName>"; // 创建OSSClient实例。 OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret); // 删除存储空间的跨域资源共享规则。 ossClient.deleteBucketCORSRules(bucketName); // 关闭OSSClient。 ossClient.shutdown();