Object Storage Service (OSS) uses data centers distributed around the globe to implement transfer acceleration. When a request is sent to your bucket, it is parsed and routed to the data center where the bucket is located over the optimal network path and protocol. The transfer acceleration feature provides an optimized end-to-end acceleration solution to accessing OSS over the Internet.

Prerequisites

You must complete real-name registration on the Real-name Registration page before you can enable transfer acceleration for a bucket.

Scenarios

  • Accelerate remote data transfer

    For example, forums and online collaboration tools that provide services to users across the globe store data in OSS. However, upload and download speeds vary from region to region, which delivers an inconsistent user experience. OSS transfer acceleration allows users from different regions to access data in OSS over the optimal network path. This accelerates data transfer and improves user experience.

  • Accelerate the uploads and downloads of gigabyte- and terabyte-grade objects

    When large objects are uploaded or downloaded over long geographical distances, transmission failures may occur due to high network latencies. Transfer acceleration combines optimal route selection, protocol stack tuning, and transmission algorithm optimization to reduce timeouts during remote transfer of large objects over the Internet. You can combine transfer acceleration with Multipart upload and Resumable download to develop a solution to uploading and downloading large objects over long distances.

  • Accelerate the downloads of non-static and non-hot data

    User experience is a driving factor for product competitiveness and customer retention in applications that require high data download speeds, such as photo management applications, games, e-commerce applications, enterprise portal websites, and financial applications. High download speeds are also required to obtain comments on social networking applications. OSS transfer acceleration is a feature designed to accelerate uploads to and downloads from OSS. You can enable transfer acceleration to maximize bandwidth utilization and accelerate data transfer.

Usage notes

  • Transfer acceleration takes effect within 30 minutes after it is enabled.
  • Access is accelerated only when you use an accelerate endpoint to access a bucket that has transfer acceleration enabled.
  • When you use an accelerate endpoint, you can manage only buckets that have transfer acceleration enabled.
  • After you enable transfer acceleration for a bucket, other endpoints of the bucket remain available. In scenarios where transfer acceleration is not required, you can use the default endpoint to avoid unnecessary charges.
  • Accelerate endpoints can be accessed only by API requests that use the HTTP or HTTPS protocol. Access by API requests that use other protocols such as RTMP is not supported.
  • To ensure data security, the protocol used in transmission may be changed from HTTP to HTTPS after the peer end receives the request. Therefore, when the client uses an accelerate endpoint to access OSS over HTTP, the protocol recorded in access logs may be HTTPS.
  • If you enable transfer acceleration and use an accelerate endpoint to access your bucket, OSS charges transfer acceleration fees. For more information about the billing methods of transfer acceleration, see Transfer acceleration fees.

Enable transfer acceleration

After you enable transfer acceleration for a bucket by using one of the following methods, you can access the bucket by using the following two endpoints in addition to the default endpoint.

  • Global accelerate endpoint: oss-accelerate.aliyuncs.com. Transfer acceleration access points are distributed across the world. You can use this endpoint to accelerate data transfer for buckets in all regions.
  • Accelerate endpoint of regions outside mainland China: oss-accelerate-overseas.aliyuncs.com. Transfer acceleration access points are distributed across regions outside mainland China. You can use these accelerate endpoints to map a custom domain name without an ICP filing to a bucket in the China (Hong Kong) region or a region outside mainland China.

Use the OSS console

  1. Log on to the OSS console.
  2. In the left-side navigation pane, click Buckets. On the Buckets page, click the name of the bucket for which you want to configure a mirroring-based back-to-origin rule.
  3. In the left-side navigation pane, choose Transmission > Transfer Acceleration.
  4. Click Configure, turn on Transfer Acceleration, and then click Save.

Use OSS SDKs

import com.aliyun.oss.ClientException;
import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.OSSException;

public class Demo {

    public static void main(String[] args) throws Exception {
        // In this example, the endpoint of the China (Hangzhou) region is used. Specify the endpoint based on your business requirements. 
        String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
        // Security risks may arise if you use the AccessKey pair of an Alibaba Cloud account to access OSS because the account has permissions on all API operations. We recommend that you use a RAM user to call API operations or perform routine O&M. To create a RAM user, log on to the RAM console. 
        String accessKeyId = "yourAccessKeyId";
        String accessKeySecret = "yourAccessKeySecret";
        // Specify the name of the bucket. Example: examplebucket. 
        String bucketName = "examplebucket";

        // Create an OSSClient instance. 
        OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);

        try {
            // Configure transfer acceleration for the bucket. 
            // If enabled is set to true, transfer acceleration is enabled. If enabled is set to false, transfer acceleration is disabled. 
            boolean enabled = true;
            ossClient.setBucketTransferAcceleration(bucketName, enabled);

        } catch (OSSException oe) {
            System.out.println("Caught an OSSException, which means your request made it to OSS, "
                    + "but was rejected with an error response for some reason.");
            System.out.println("Error Message:" + oe.getErrorMessage());
            System.out.println("Error Code:" + oe.getErrorCode());
            System.out.println("Request ID:" + oe.getRequestId());
            System.out.println("Host ID:" + oe.getHostId());
        } catch (ClientException ce) {
            System.out.println("Caught an ClientException, which means the client encountered "
                    + "a serious internal problem while trying to communicate with OSS, "
                    + "such as not being able to access the network.");
            System.out.println("Error Message:" + ce.getMessage());
        } finally {
            if (ossClient != null) {
                ossClient.shutdown();
            }
        }
    }
}
import oss2

# Security risks may arise if you use the AccessKey pair of an Alibaba Cloud account to access OSS because the account has permissions on all API operations. We recommend that you use a RAM user to call API operations or perform routine O&M. To create a RAM user, log on to the RAM console. 
auth = oss2.Auth('yourAccessKeyId', 'yourAccessKeySecret')
# Set yourEndpoint to the endpoint of the region in which the bucket is located. For example, if the bucket is located in the China (Hangzhou) region, set Endpoint to https://oss-cn-hangzhou.aliyuncs.com. 
# Specify the name of the bucket. Example: examplebucket. 
bucket = oss2.Bucket(auth, 'https://oss-cn-hangzhou.aliyuncs.com', 'examplebucket')

# Configure transfer acceleration for the bucket. 
# If enabled is set to true, transfer acceleration is enabled. If enabled is set to false, transfer acceleration is disabled. 
enabled = 'true'
bucket.put_bucket_transfer_acceleration(enabled)
package main

import (
  "fmt"
  "os"

  "github.com/aliyun/aliyun-oss-go-sdk/oss"
)

func HandleError(err error) {
  fmt.Println("Error:", err)
  os.Exit(-1)
}

func main() {
  // Create an OSSClient instance. 
  // Set Endpoint to the endpoint of the region in which the bucket is located. For example, if your bucket is located in the China (Hangzhou) region, set Endpoint to https://oss-cn-hangzhou.aliyuncs.com. 
  // Security risks may arise if you use the AccessKey pair of an Alibaba Cloud account to log on to OSS because the account has permissions on all API operations. We recommend that you use a RAM user to call API operations or perform routine operations and maintenance. To create a RAM user, log on to the RAM console. 
  client, err := oss.New("yourEndpoint", "yourAccessKeyId", "yourAccessKeySecret")
  if err != nil {
    HandleError(err)
  }

  // Specify the bucket name. 
  bucketName := "examplebucket"

  // Enable transfer acceleration for the bucket. 
  // The Enabled parameter specifies whether to enable transfer acceleration. A value of true specifies that transfer acceleration is enabled. A value of false specifies that transfer acceleration is disabled. 
  accConfig := oss.TransferAccConfiguration{}
  accConfig.Enabled = true

  err = client.SetBucketTransferAcc(bucketName, accConfig)
  if err != nil {
    HandleError(err)
  }
  fmt.Printf("set bucket transfer accelerate success\n")  
}

Use the RESTful API

If your program requires high customization, you can directly initiate a RESTful API request. In this case, you need to manually write code to calculate the signature. For more information, see PutBucketTransferAcceleration.

Implementation methods

Use a browser

When you use a browser to access data stored in OSS, replace the endpoint in the object URL with an accelerate endpoint. For example, replace https://test.oss-cn-shenzhen.aliyuncs.com/myphoto.jpg with https://test.oss-accelerate.aliyuncs.com/myphoto.jpg. For more information about how to obtain the URL of an object, see How do I obtain the URL of an uploaded object?. If the access control list (ACL) of the object you want to access is private, you must sign the access request.
Note To accelerate access to a bucket with transfer acceleration enabled and a custom domain name mapped, configure CNAME to map your custom domain name to an accelerate endpoint. For more information about how to configure mirroring-based back-to-origin rules, see Bind accelerate endpoints.

Use ossutil

  • Replace the endpoint specified in the configuration file of ossutil with an accelerate endpoint

    When you use ossutil to access data stored in OSS, replace the endpoint specified in the configuration file with an accelerate endpoint. For more information, see ossutil.

  • Add -e oss-accelerate.aliyuncs.com to commands

    When you run commands in ossutil, add the -e oss-accelerate.aliyuncs.com option to the commands. The following figure shows how to specify an accelerate endpoint when you run the cp command to upload an object by using ossutil.

    ossu

Use ossbrowser

Notice When you access a bucket stored in OSS by using ossbrowser, you must specify your AccessKey pair and the preset path of the bucket in OSS.

The following table describes the parameters that you must configure when you use ossbrowser to access data stored in OSS.

Parameter Description
Endpoint Select Customize and enter https://oss-accelerate.aliyuncs.com.
AccessKeyId and AccessKeySecret Enter the AccessKey pair of your account. For more information about how to obtain the AccessKey pair, see Obtain an AccessKey pair.
Notice To ensure data security, we recommend that you log on to ossbrowser by using the AccessKey pair of a Resource Access Management (RAM) user. Before you use the AccessKey pair of a RAM user to log on to ossbrowser, you must grant the following permissions to the RAM user: AliyunOSSFullAccess, AliyunRAMFullAccess, and AliyunSTSAssumeRoleAccess. For more information, see Permission management.
Preset OSS Path Specify permissions on a bucket or resources stored in the bucket. oss://bucketname/path. For example, if you are authorized to access only objects or subdirectories in the examplefolder directory of a bucket named examplebucket, enter oss://examplebucket/examplefolder/.

Sample configurations:

Transfer.jpg

Use OSS SDKs

When you use OSS SDKs for different programming languages to access OSS, set the endpoint parameter to an accelerate endpoint. The following code provides examples on how to specify an accelerate endpoint when you use OSS SDK for Java to perform simple upload and download.
  • Simple upload
    import com.aliyun.oss.ClientException;
    import com.aliyun.oss.OSS;
    import com.aliyun.oss.OSSClientBuilder;
    import com.aliyun.oss.OSSException;
    import com.aliyun.oss.model.PutObjectRequest;
    import java.io.File;
    
    public class Demo {
    
        public static void main(String[] args) throws Exception {
            // Specify an accelerate endpoint. In this example, the global accelerate endpoint is used. 
            String endpoint = "https://oss-accelerate.aliyuncs.com";
            // Security risks may arise if you use the AccessKey pair of an Alibaba Cloud account to access OSS because the account has permissions on all API operations. We recommend that you use a RAM user to call API operations or perform routine O&M. To create a RAM user, log on to the RAM console. 
            String accessKeyId = "yourAccessKeyId";
            String accessKeySecret = "yourAccessKeySecret";
            // Specify the name of the bucket. Example: examplebucket. 
            String bucketName = "examplebucket";
            // Specify the full path of the object. Example: exampledir/exampleobject.txt. The full path of the object cannot contain the bucket name. 
            String objectName = "exampledir/exampleobject.txt";
            // Specify the full path of the local file. Example: D:\\localpath\\examplefile.txt. 
            // By default, if the path of the local file is not specified, the local file is uploaded from the path of the project to which the sample program belongs. 
            String filePath= "D:\\localpath\\examplefile.txt";
    
            // Create an OSSClient instance. 
            OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
    
            try {
                // Create a PutObjectRequest object.             
                PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, objectName, filePath);
                // Optional. Specify the storage class and the access control list (ACL) of the object. 
                // ObjectMetadata metadata = new ObjectMetadata();
                // metadata.setHeader(OSSHeaders.OSS_STORAGE_CLASS, StorageClass.Standard.toString());
                // metadata.setObjectAcl(CannedAccessControlList.Private);
                // putObjectRequest.setMetadata(metadata);
    
                // Upload the object. 
                ossClient.putObject(putObjectRequest);
            } catch (OSSException oe) {
                System.out.println("Caught an OSSException, which means your request made it to OSS, "
                        + "but was rejected with an error response for some reason.");
                System.out.println("Error Message:" + oe.getErrorMessage());
                System.out.println("Error Code:" + oe.getErrorCode());
                System.out.println("Request ID:" + oe.getRequestId());
                System.out.println("Host ID:" + oe.getHostId());
            } catch (ClientException ce) {
                System.out.println("Caught an ClientException, which means the client encountered "
                        + "a serious internal problem while trying to communicate with OSS, "
                        + "such as not being able to access the network.");
                System.out.println("Error Message:" + ce.getMessage());
            } finally {
                if (ossClient != null) {
                    ossClient.shutdown();
                }
            }
        }
    }            
  • Simple download
    import com.aliyun.oss.ClientException;
    import com.aliyun.oss.OSS;
    import com.aliyun.oss.OSSClientBuilder;
    import com.aliyun.oss.OSSException;
    import com.aliyun.oss.model.GetObjectRequest;
    import java.io.File;
    
    public class Demo {
    
        public static void main(String[] args) throws Exception {
            // Specify an accelerate endpoint. In this example, the global accelerate endpoint is used. 
            String endpoint = "https://oss-accelerate.aliyuncs.com";
            // Security risks may arise if you use the AccessKey pair of an Alibaba Cloud account to access OSS because the account has permissions on all API operations. We recommend that you use a RAM user to call API operations or perform routine O&M. To create a RAM user, log on to the RAM console. 
            String accessKeyId = "yourAccessKeyId";
            String accessKeySecret = "yourAccessKeySecret";
            // Specify the name of the bucket. Example: examplebucket. 
            String bucketName = "examplebucket";
            // Specify the full path of the object. The full path of the object cannot contain bucket names. Example: testfolder/exampleobject.txt. 
            String objectName = "testfolder/exampleobject.txt";
            String filePath = "D:\\localpath\\examplefile.txt";
    
            // Create an OSSClient instance. 
            OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
    
            try {
                // Download the object to a local file in the specified path. If the specified local file exists, the object to download replaces the file. Otherwise, the file is created. 
                // If the path for the object is not specified, the downloaded object is saved to the path of the project to which the sample program belongs. 
                ossClient.getObject(new GetObjectRequest(bucketName, objectName), new File(filePath));
            } catch (OSSException oe) {
                System.out.println("Caught an OSSException, which means your request made it to OSS, "
                        + "but was rejected with an error response for some reason.");
                System.out.println("Error Message:" + oe.getErrorMessage());
                System.out.println("Error Code:" + oe.getErrorCode());
                System.out.println("Request ID:" + oe.getRequestId());
                System.out.println("Host ID:" + oe.getHostId());
            } catch (ClientException ce) {
                System.out.println("Caught an ClientException, which means the client encountered "
                        + "a serious internal problem while trying to communicate with OSS, "
                        + "such as not being able to access the network.");
                System.out.println("Error Message:" + ce.getMessage());
            } finally {
                if (ossClient != null) {
                    ossClient.shutdown();
                }
            }
        }
    }

Test the effect of transfer acceleration

Use ossutil

You can run commands in ossutil to respectively upload an object to OSS by using the default endpoint and the accelerate endpoint. Then, compare the time that is used to upload the object to verify the effect of transfer acceleration. In the sample commands shown in the following figure, the -e oss-us-west-1.aliyuncs.com option is used to upload the object by using the default endpoint, and the -e oss-accelerate.aliyuncs.com option is used to upload the object by using the accelerate endpoint.

Use online tools

You can compare the access speeds when you use the accelerate and default endpoints to access OSS in different regions. For more information, see The Comparison of OSS Direct Data Transfer and Accelerated Data Transfer in Different Regions.

FAQ

  • What are the differences between transfer acceleration and Alibaba Cloud Content Delivery Network (CDN)?
    Feature How it works Scenario
    Transfer acceleration Transfer acceleration provides an end-to-end acceleration solution by combining smart scheduling, protocol stack tuning, optimal route selection, and transmission algorithm optimization with OSS server-side configurations.
    • Accelerate object uploads.
    • Accelerate remote object uploads and downloads.
    • Accelerate the uploads and downloads of large objects.
    • Accelerate the downloads of dynamic objects and non-hot objects.
    Alibaba Cloud CDN Alibaba Cloud CDN uses OSS buckets as origin servers and distributes the content to edge nodes. When users request content, Alibaba Cloud CDN delivers content to the users from the nodes that are nearest to them. This way, content delivery is accelerated. Accelerate content delivery when a large number of users in the same region concurrently request the same static content.
  • How do I implement transfer acceleration by using a custom domain name?

    After you map a custom domain name to a bucket, you can map the CNAME to an accelerate endpoint. For more information, see Bind accelerate endpoints.

  • Why am I unable to list buckets by using an accelerate endpoint?

    Transfer acceleration is applicable only to third-level domains that contain a specific bucket name, such as https://BucketName.oss-accelerate.aliyuncs.com. The domain name in a ListBuckets request does not contain a bucket name. Therefore, accelerate endpoints cannot be used to list buckets. To list buckets in a specific region, we recommend that you use the default endpoint of the region, such as https://oss-cn-hangzhou.aliyuncs.com.