tencent cloud

对象存储

动态与公告
产品动态
产品公告
产品简介
产品概述
功能概览
应用场景
产品优势
基本概念
地域和访问域名
规格与限制
产品计费
计费概述
计费方式
计费项
免费额度
计费示例
查看和下载账单
欠费说明
常见问题
快速入门
控制台快速入门
COSBrowser 快速入门
用户指南
创建请求
存储桶
对象
数据管理
批量处理
全球加速
监控与告警
运维中心
数据处理
内容审核
智能工具箱
数据工作流
应用集成
工具指南
工具概览
环境安装与配置
COSBrowser 工具
COSCLI 工具
COSCMD 工具
COS Migration 工具
FTP Server 工具
Hadoop 工具
COSDistCp 工具
HDFS TO COS 工具
GooseFS-Lite 工具
在线辅助工具
自助诊断工具
实践教程
概览
访问控制与权限管理
性能优化
使用 AWS S3 SDK 访问 COS
数据容灾备份
域名管理实践
图片处理实践
COS 音视频播放器实践
工作流实践
数据直传
内容审核实践
数据安全
数据校验
大数据实践
COS 成本优化解决方案
在第三方应用中使用 COS
迁移指南
本地数据迁移至 COS
第三方云存储数据迁移至 COS
以 URL 作为源地址的数据迁移至 COS
COS 之间数据迁移
Hadoop 文件系统与 COS 之间的数据迁移
数据湖存储
云原生数据湖
元数据加速
数据加速器 GooseFS
数据处理
数据处理概述
图片处理
媒体处理
内容审核
文件处理
文档处理
故障处理
获取 RequestId 操作指引
通过外网上传文件至 COS 缓慢
访问 COS 时返回403错误码
资源访问异常
POST Object 常见异常
API 文档
简介
公共请求头部
公共响应头部
错误码
请求签名
操作列表
Service 接口
Bucket 接口
Object 接口
批量处理接口
数据处理接口
任务与工作流
内容审核接口
云查毒接口
SDK 文档
SDK 概览
准备工作
Android SDK
C SDK
C++ SDK
.NET(C#) SDK
Flutter SDK
Go SDK
iOS SDK
Java SDK
JavaScript SDK
Node.js SDK
PHP SDK
Python SDK
React Native SDK
小程序 SDK
错误码
鸿蒙(Harmony) SDK
终端 SDK 质量优化
安全与合规
数据容灾
数据安全
访问管理
常见问题
热门问题
一般性问题
计费计量问题
域名合规问题
存储桶配置问题
域名和 CDN 问题
文件操作问题
日志监控问题
权限管理问题
数据处理问题
数据安全问题
预签名 URL 问题
SDK 类问题
工具类问题
API 类问题
服务协议
Service Level Agreement
隐私政策
数据处理和安全协议
联系我们
词汇表

网络线路加速

PDF
聚焦模式
字号
最后更新时间: 2026-02-10 15:54:47

简介

本文介绍如何通过优化网络访问线路提升上传下载等 COS 操作的成功率和速度。

功能说明

腾讯云在全球很多地区部署了存储中心,客户可以选择性地启用这些存储中心。但即便如此,还是无法避免一些终端用户与存储中心距离太远,以及部分客户的业务场景中存在需跨地区甚至跨海访问的场景。长距离的数据访问通常就意味着更长的网络链路和更大的传输时延,而且一旦中间某一个环节出现网络抖动、丢包等问题,就会拉低整条链路的访问速度和成功率。
针对长距离访问场景,网络链路过长导致的网络访问质量不佳问题,可以通过 COS 全球加速EdgeOne 等将用户的请求转发给最靠近用户的边缘节点,就近接收用户的数据。再通过腾讯云打磨多年的加速网络,选择最优链路,将数据传送到存储中心。
因此,如果您对上传下载等 COS 操作的成功率、延迟较为敏感,您可以使用 COS 全球加速EdgeOne 等服务访问 COS。

前提条件

您可以基于 COS 全球加速EdgeOne 体验网络线路加速能力。在您开始执行操作前,需要开通服务,并完成相关的配置,操作步骤如下:
COS 全球加速
前往 COS 控制台 开启 COS 全球加速,具体操作请参见 开启 COS 全球加速

EdgeOne + COS 全球加速
1.1 前往 EdgeOne 控制台 开通,具体操作请参见 开通 EdgeOne
1.2 在 EdgeOne 控制台单击添加站点,添加业务方的加速域名,进入站点后进行域名管理添加域名时请选择对象存储源站S3兼容,在源站地址处填入 COS 全球加速域名(<BucketName-APPID>.cos.accelerate.myqcloud.com)。



1.3 开启 EdgeOne 的智能加速功能,请参见 智能加速
1.4 获取步骤1.2中的加速域名,该域名后续需要配置到 COS SDK 中。
注意:
COS 全球加速、EdgeOne 会产生一定的费用,详情请参见 COS 全球加速计费说明EdgeOne计费说明

操作步骤

方式一:COS 全球加速

COS 全球加速功能的请求信息会通过腾讯云内网专线加速传输,不仅能实现请求的就近接入,还可以实现数据上传加速和下载加速。
Android
iOS
Web
通过 COS SDK 中 CosXmlServiceConfig 进行开启 COS 全球加速。
String region = "ap-beijing"; // 您的存储桶地域

CosXmlServiceConfig cosXmlServiceConfig = new CosXmlServiceConfig.Builder()
.setRegion(region)
.setAccelerate(true) // 使用 COS 全球加速域名
.builder();

CosXmlService cosXmlService = new CosXmlService(context, cosXmlServiceConfig,
credentialProvider);
通过 COS SDK 中 QCloudServiceConfiguration 进行开启 COS 全球加速。
QCloudServiceConfiguration* configuration = [QCloudServiceConfiguration new];
configuration.appID = @"appId"; // 设置 APP ID
configuration.signatureProvider = self;
QCloudCOSXMLEndPoint *endpoint = [[QCloudCOSXMLEndPoint alloc]init];
endpoint.suffix = @"cos.accelerate.myqcloud.com"; // 设置全球加速域名
endpoint.useHTTPS = YES; // 使用 https
configuration.endpoint = endpoint;
在浏览器端,使用 JavaScript SDK 实例化时,配置 UseAccelerate: true 可指定使用全球加速上传/下载。
var cos = new COS({
UseAccelerate: true, // 指定 true,使用全球加速域名请求
});

方式二:EdgeOne + COS 全球加速

该方式结合了 EdgeOne 和 COS 全球加速的优点:EdgeOne 边缘节点覆盖广,COS 全球加速内网加速回源。
Android
iOS
Web
通过 COS SDK 中 CosXmlServiceConfig 进行加速域名的配置。
String region = "ap-beijing"; // 您的存储桶地域
String eoDomain = "exampledomain.com"; // eo 加速域名

CosXmlServiceConfig cosXmlServiceConfig = new CosXmlServiceConfig.Builder()
.setRegion(region)
.setHost(eoDomain) // 配置加速域名
.addNoSignHeaders("Host") // EO 转发请求时 host 会变化,此处需要避免 host 签名
.builder();

CosXmlService cosXmlService = new CosXmlService(context, cosXmlServiceConfig,
credentialProvider);
通过 COS SDK 中 QCloudServiceConfiguration 进行加速域名的配置。
NSString * eoDomain = @"exampledomain.com";
QCloudServiceConfiguration* configuration = [QCloudServiceConfiguration new];
configuration.appID = @"appId"; // 设置 APP ID
configuration.signatureProvider = self;
QCloudCOSXMLEndPoint* endpoint = [[QCloudCOSXMLEndPoint alloc] initWithLiteralURL:[NSURL URLWithString:eoDomain]]; // 设置加速域名
endpoint.useHTTPS = YES; // 使用 https
configuration.endpoint = endpoint;
1. 在浏览器端上传 EdgeOne 域名,需要到 EdgeOne 设置请求固定返回 CORS 跨域头,其中对 Access-Control-Allow-Headers 头部设置为 Authorization,x-cos-security-token,x-cos-sdk-retry,Cache-Control,Content-Type,Content-Length,Content-Md5

2. 在浏览器端,使用 JavaScript SDK 实例化时,使用 Domain 参数指定走 EO 域名上传下载。
var cos = new COS({
Domain: 'edgeone.example.com', // 指定请求域名为 EdgeOne 的域名。
ForceSignHost: false, // 由于实际请求的域名和回源域名不一致,需要指定不签 Host 头。
Host
});

方式三:SDK 内配置线路切换

为了提高 SDK 请求的成功率以及节省成本,SDK 提供了线路切换策略的配置方法:
保守策略:先使用 COS 默认线路进行请求,网络失败后自动使用加速线路进行重试。
激进策略:先使用加速线路进行请求,网络失败后自动使用 COS 默认线路进行重试。
自定义策略:SDK 提供了配置请求网络线路的方法,可以灵活的在业务层控制请求和切换的逻辑(例如根据网络质量自动切换)。
不配置切换策略,则直接使用方式一和方式二中的加速线路进行请求。
Android
iOS
通过 COS SDK 中 CosXmlServiceConfig 的 setNetworkSwitchStrategy 方法进行保守和激进策略的配置。
String region = "ap-beijing"; // 您的存储桶地域
String eoDomain = "exampledomain.com"; // eo 加速域名
// 激进策略
CosXmlServiceConfig.RequestNetworkStrategy aggressiveStrategy = CosXmlServiceConfig.RequestNetworkStrategy.Aggressive;
// 保守策略
CosXmlServiceConfig.RequestNetworkStrategy conservativeStrategy = CosXmlServiceConfig.RequestNetworkStrategy.Conservative;

CosXmlServiceConfig cosXmlServiceConfig = new CosXmlServiceConfig.Builder()
.setRegion(region)
.setHost(eoDomain) // 配置加速域名
.addNoSignHeaders("Host") // EO 转发请求时 host 会变化,此处需要避免 host 签名
.setNetworkSwitchStrategy(aggressiveStrategy) // 配置切换策略为激进策略
//.setNetworkSwitchStrategy(conservativeStrategy) // 配置切换策略为保守策略
.builder();

CosXmlService cosXmlService = new CosXmlService(context, cosXmlServiceConfig,
credentialProvider);
通过请求基类 CosXmlRequest 的 setHost 进行自定义策略的配置。
// 任何CosXmlRequest都支持这种方式,例如上传PutObjectRequest、下载GetObjectRequest、删除DeleteObjectRequest等
// 以下用上传进行示例
PutObjectRequest putRequest = new PutObjectRequest("examplebucket-1250000000", "exampleobject.txt", "本地文件路径");
String eoDomain = "exampledomain.com"; // eo 加速域名
// 自定义配置具体的请求网络线路,设置null则走默认的COS域名线路
putRequest.setHost(eoDomain);
// 初始化 TransferConfig,这里使用默认配置,如果需要定制,请参考 SDK 接口文档
TransferConfig transferConfig = new TransferConfig.Builder().build();
// 初始化 TransferManager
TransferManager transferManager = new TransferManager(cosXmlService, transferConfig);
COSXMLUploadTask uploadTask = transferManager.upload(putRequest, null);
通过 COS SDK 中 QCloudServiceConfiguration 的 networkStrategy 方法进行保守和激进策略的配置。
NSString * eoDomain = @"exampledomain.com";
QCloudServiceConfiguration* configuration = [QCloudServiceConfiguration new];
configuration.appID = @"appId"; // 设置 APP ID
configuration.signatureProvider = self;
QCloudCOSXMLEndPoint* endpoint = [[QCloudCOSXMLEndPoint alloc] initWithLiteralURL:[NSURL URLWithString:eoDomain]]; // 设置加速域名
endpoint.useHTTPS = YES; // 使用 https
// 配置加速域名
configuration.endpoint = endpoint;
// 配置切换策略为激进策略
configuration.networkStrategy = QCloudRequestNetworkStrategyAggressive;
// 配置切换策略为保守策略
// configuration.networkStrategy = QCloudRequestNetworkStrategyConservative;

[QCloudCOSXMLService registerDefaultCOSXMLWithConfiguration:configuration];
[QCloudCOSTransferMangerService registerDefaultCOSTransferMangerWithConfiguration:configuration];
注意:
EO 转发请求时 host 会变化,生成签名时需要指定 Host 不参与签名。如下所示:
- (void) signatureWithFields:(QCloudSignatureFields*)fileds
request:(QCloudBizHTTPRequest*)request
urlRequest:(NSMutableURLRequest*)urlRequst
compelete:(QCloudHTTPAuthentationContinueBlock)continueBlock
{
//这里同步从后台服务器获取临时密钥,强烈建议将获取临时密钥的逻辑放在这里,最大程度上保证密钥的可用性
//...
QCloudCredential* credential = [QCloudCredential new];

// 临时密钥 SecretId
// sercret_id 替换为用户的 SecretId,登录访问管理控制台查看密钥,https://console.tencentcloud.com/cam/capi
credential.secretID = @"SECRETID";
// 临时密钥 SecretKey
// sercret_key替换为用户的 SecretKey,登录访问管理控制台查看密钥,https://console.tencentcloud.com/cam/capi
credential.secretKey = @"SECRETKEY";
// 临时密钥 Token
// 如果使用永久密钥不需要填入 token,如果使用临时密钥需要填入,临时密钥生成和使用指引参见 https://www.tencentcloud.com/document/product/436/14048?from_cn_redirect=1
credential.token = @"TOKEN";
/** 强烈建议返回服务器时间作为签名的开始时间, 用来避免由于用户手机本地时间偏差过大导致的签名不正确(参数 startTime 和 expiredTime 单位为秒)
*/
credential.startDate = [NSDate dateWithTimeIntervalSince1970:startTime]; // 单位是秒
credential.expirationDate = [NSDate dateWithTimeIntervalSince1970:expiredTime]];// 单位是秒

QCloudAuthentationV5Creator* creator = [[QCloudAuthentationV5Creator alloc]
initWithCredential:credential];
// 设置需要参与签名的 Header,不包含 Host 即可。
creator.shouldSignedList = @[@"Cache-Control", @"Content-Disposition", @"Content-Encoding", @"Content-Length", @"Content-MD5", @"Content-Type", @"Expect", @"Expires", @"If-Match" , @"If-Modified-Since" , @"If-None-Match" , @"If-Unmodified-Since" , @"Origin" , @"Range" , @"transfer-encoding",@"Pic-Operations",@"ci-process"];
// 注意,这里不要对 urlRequst 进行 copy 以及 mutableCopy 操作
QCloudSignature *signature = [creator signatureForData:urlRequst];
continueBlock(signature, nil);
}
通过设置基类 QCloudAbstractRequest 的 endpoint 进行自定义域名的配置。
QCloudPutObjectRequest* put = [QCloudPutObjectRequest new];
// 设置自定义域名
NSString * eoDomain = @"exampledomain.com";
QCloudCOSXMLEndPoint* endpoint = [[QCloudCOSXMLEndPoint alloc] initWithLiteralURL:[NSURL URLWithString:eoDomain]]; // 设置加速域名
put.endpoint = endpoint;
// 存储桶名称,由 BucketName-Appid 组成,可以在 COS 控制台查看 https://console.tencentcloud.com/cos5/bucket
put.bucket = @"examplebucket-1250000000";
// 对象键,是对象在 COS 上的完整路径,如果带目录的话,格式为 "video/xxx/movie.mp4"
put.object = @"exampleobject";
// 文件内容,可以传入 NSData*或者 NSURL*类型的变量
put.body = [@"testFileContent" dataUsingEncoding:NSUTF8StringEncoding];
[put setFinishBlock:^(id result, NSError *error) {
// result 包含响应的 header 信息
// 获取文件 crc64
NSString * crc64 = [[result __originHTTPURLResponse__].allHeaderFields valueForKey:@"x-cos-hash-crc64ecma"];
}];
[[QCloudCOSXMLService defaultCOSXML] PutObject:put];

示例工程

Android 示例 Demo 请参见 COS SDK 网络优化 Demo 下的 CosServiceFactory
iOS 示例 Demo 请参见 COS SDK 网络优化 Demo 下的 AppDelegate

帮助和支持

本页内容是否解决了您的问题?

填写满意度调查问卷,共创更好文档体验。

文档反馈