

# 在存储桶上配置申请方付款
<a name="RequesterPaysExamples"></a>

您可以将 Amazon S3 存储桶配置为*申请方付款*存储桶，以便请求者而不是存储桶拥有者支付请求和数据下载费用。

本节提供了演示如何使用控制台和 REST API 在 Amazon S3 存储桶上配置申请方付款的示例。

## 使用 S3 控制台
<a name="configure-requester-pays-console"></a>

**为 S3 通用存储桶启用申请方付款**

1. 登录到 AWS 管理控制台，然后通过以下网址打开 Amazon S3 控制台：[https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/)。

1. 在左侧导航窗格中，选择**通用存储桶**。

1. 在**通用存储桶**列表中，选择要为其启用申请方付款的存储桶的名称。

1. 选择**属性**。

1. 在 **Requester pays (申请方付款)** 下，选择 **Edit (编辑)**。

1. 选择 **Enable (启用)**，然后选择 **Save changes (保存更改)**。

   Amazon S3 为存储桶启用申请方付款，并显示 **Bucket overview（存储桶概述）**。在 **Requester pays (申请方付款)** 下，您将看到 **Enabled (已启用)**。

## 使用 REST API
<a name="RequesterPaysBucketConfiguration"></a>

只有存储桶拥有者才能将存储桶的 `RequestPaymentConfiguration.payer` 配置值设置为 `BucketOwner`（默认值）或 `Requester`。设置 `requestPayment` 资源是可选的。默认情况下，存储桶不是申请方付款存储桶。

要将申请方付款存储桶恢复为常规存储桶，请使用值 `BucketOwner`。通常情况下，在将数据上传到 Amazon S3 存储桶时，您将使用 `BucketOwner`，然后将值设置为 `Requester`，才能在该存储桶中发布对象。

**设置 requestPayment 的步骤**
+ 使用 `PUT` 请求在指定存储桶上将 `Payer` 值设置为 `Requester`。

  ```
  1. PUT ?requestPayment HTTP/1.1
  2. Host: [BucketName].s3.amazonaws.com
  3. Content-Length: 173
  4. Date: Wed, 01 Mar 2009 12:00:00 GMT
  5. Authorization: AWS [Signature]
  6. 
  7. <RequestPaymentConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
  8. <Payer>Requester</Payer>
  9. </RequestPaymentConfiguration>
  ```

如果请求成功，Amazon S3 将返回类似于以下内容的请求。

```
1. HTTP/1.1 200 OK
2. x-amz-id-2: [id]
3. x-amz-request-id: [request_id]
4. Date: Wed, 01 Mar 2009 12:00:00 GMT
5. Content-Length: 0
6. Connection: close
7. Server: AmazonS3
8. x-amz-request-charged:requester
```

您只能在存储桶级别设置申请方付款。您无法为存储桶中的特定对象设置申请方付款。

您可以随时将存储桶配置为 `BucketOwner` 或 `Requester`。但是，新配置值可能需要几分钟才能生效。

**注意**  
在将存储桶配置为申请方付款之前，分发预签名 URL 的存储桶拥有者应当再三考虑，尤其是在 URL 的生命周期非常长时更应如此。在每次申请方使用预签名 URL（使用存储桶拥有者的凭证）时，会向存储桶拥有者收取费用。