开发者社区 问答 正文

PHP-SDK之如何实现跨域资源共享?

跨域资源共享(CORS)允许web端的应用程序访问不属于本域的资源。OSS提供接口方便开发者控制跨域访问的权限。
更多关于跨域资源共享的内容请参考 跨域访问


提示:
  • 以下场景的完整代码请参见:GitHub


设定CORS规则


通过putBucketCors 方法将指定的存储空间上设定一个跨域资源共享CORS的规则,如果原规则存在则覆盖原规则。具体的规则主要通过CORSRule类来进行参数设置。
您可以通过OssClient::putBucketCors设置存储空间的CORS规则: <?php
/**
* 设置bucket的cors配置
*
* @param OssClient $ossClient OSSClient实例
* @param string    $bucket 存储空间名称
* @return null
*/
function putBucketCors($ossClient, $bucket)
{
    $corsConfig = new CorsConfig();
    $rule = new CorsRule();
    $rule->addAllowedHeader("x-oss-header");
    $rule->addAllowedOrigin("http://www.b.com");
    $rule->addAllowedMethod("POST");
    $rule->setMaxAgeSeconds(10);
    $corsConfig->addRule($rule);
    try{
        $ossClient->putBucketCors($bucket, $corsConfig);
    } catch(OssException $e) {
        printf(__FUNCTION__ . ": FAILED\n");
        printf($e->getMessage() . "\n");
        return;
    }
    print(__FUNCTION__ . ": OK" . "\n");
}


注意:
  • 每个存储空间最多只能使用10条CorsRule
  • AllowedOrigins和AllowedMethods都能够最多支持一个”*”通配符。”*”表示对于所有的域来源或者操作都满足。
  • 而AllowedHeaders和ExposeHeaders不支持通配符。


获取CORS规则


您可以通过OssClient::getBucketCors获取存储空间上设置的CORS规则: <?php
/**
* 获取并打印bucket的cors配置
*
* @param OssClient $ossClient OSSClient实例
* @param string    $bucket bucket名字
* @return null
*/
function getBucketCors($ossClient, $bucket)
{
    $corsConfig = null;
    try{
        $corsConfig = $ossClient->getBucketCors($bucket);
    } catch(OssException $e) {
        printf(__FUNCTION__ . ": FAILED\n");
        printf($e->getMessage() . "\n");
        return;
    }
    print(__FUNCTION__ . ": OK" . "\n");
    print($corsConfig->serializeToXml() . "\n");
}



删除CORS规则


您可以通过OssClient::deleteBucketCors关闭并清除存储空间上所有的CORS规则。 <?php
/**
* 删除bucket的所有的cors配置
*
* @param OssClient $ossClient OSSClient实例
* @param string    $bucket bucket名字
* @return null
*/
function deleteBucketCors($ossClient, $bucket)
{
    try{
        $ossClient->deleteBucketCors($bucket);
    } catch(OssException $e) {
        printf(__FUNCTION__ . ": FAILED\n");
        printf($e->getMessage() . "\n");
        return;
    }
    print(__FUNCTION__ . ": OK" . "\n");
}


展开
收起
青衫无名 2017-10-19 10:09:41 1671 分享 版权
0 条回答
写回答
取消 提交回答