> ## Documentation Index
> Fetch the complete documentation index at: https://devdocs.xbox.com/llms.txt
> Use this file to discover all available pages before exploring further.

# HTTP 配置

> 使用 PFSetHttpRetrySettings 及相关 API 为 PlayFab Services C SDK 配置 HTTP 重试、超时和响应压缩设置。

PlayFab Services SDK 提供了用于配置 HTTP 请求方式的函数,包括自动重试行为和响应压缩。这些设置是全局的,适用于 SDK 发出的所有 PlayFab API 调用。

在调用 [**PFInitialize**](/services/playfab/api-references/c/pfcore/functions/pfinitialize) 和 [**PFServicesInitialize**](/services/playfab/api-references/c/pfservices/functions/pfservicesinitialize) 之后,但在进行任何 API 调用之前,配置 HTTP 设置。

## 重试设置

**PFHttpRetrySettings** 结构控制 SDK 如何处理临时性 HTTP 故障,例如限流错误 (HTTP 429)。默认情况下,SDK 会自动使用回退重试这些故障。

| 字段                           | 类型         | 默认值    | 描述                                   |
| ---------------------------- | ---------- | ------ | ------------------------------------ |
| `allowRetry`                 | `bool`     | `true` | 控制 SDK 是否自动重试特定错误。某些错误永远不会重试,始终直接返回。 |
| `minimumRetryDelayInSeconds` | `uint32_t` | 2      | 在重试失败的请求之前等待的最少秒数。不能设置为低于 2 秒。       |
| `timeoutWindowInSeconds`     | `uint32_t` | 20     | SDK 在将错误返回给调用者之前尝试重试的最长秒数。           |

有关 SDK 自动重试哪些错误的更多信息,请参阅[处理 PlayFab 错误](/services/playfab/sdks/c/errors)。

### 设置重试设置

调用 **PFSetHttpRetrySettings** 以自定义重试行为。例如,要增加可以容忍较长等待时间的调用的重试窗口:

```cpp theme={null}
PFHttpRetrySettings retrySettings{};
retrySettings.allowRetry = true;
retrySettings.minimumRetryDelayInSeconds = 4;
retrySettings.timeoutWindowInSeconds = 60;

HRESULT hr = PFSetHttpRetrySettings(&retrySettings);
if (FAILED(hr))
{
    // Handle error
}
```

### 获取重试设置

调用 **PFGetHttpRetrySettings** 以检索当前重试配置:

```cpp theme={null}
PFHttpRetrySettings currentSettings{};
HRESULT hr = PFGetHttpRetrySettings(&currentSettings);
if (SUCCEEDED(hr))
{
    printf("Retry enabled: %s\n", currentSettings.allowRetry ? "true" : "false");
    printf("Min delay: %u seconds\n", currentSettings.minimumRetryDelayInSeconds);
    printf("Timeout window: %u seconds\n", currentSettings.timeoutWindowInSeconds);
}
```

### 禁用自动重试

如果你希望自行处理所有重试逻辑,可以禁用自动重试:

```cpp theme={null}
PFHttpRetrySettings retrySettings{};
retrySettings.allowRetry = false;
retrySettings.minimumRetryDelayInSeconds = 2;
retrySettings.timeoutWindowInSeconds = 20;

HRESULT hr = PFSetHttpRetrySettings(&retrySettings);
```

## HTTP 设置

**PFHttpSettings** 结构控制所有 SDK 请求的常规 HTTP 行为。

| 字段                           | 类型     | 默认值     | 描述                                                                          |
| ---------------------------- | ------ | ------- | --------------------------------------------------------------------------- |
| `requestResponseCompression` | `bool` | `false` | 启用时,SDK 通过将 `Accept-Encoding` 头设置为 `application/gzip` 来请求 API 响应进行 gzip 压缩。 |

### 启用响应压缩

启用响应压缩可减少带宽使用,这对于返回大型有效负载的调用非常有用。调用 **PFSetHttpSettings** 以启用:

```cpp theme={null}
PFHttpSettings httpSettings{};
httpSettings.requestResponseCompression = true;

HRESULT hr = PFSetHttpSettings(&httpSettings);
if (FAILED(hr))
{
    // Handle error
}
```

<Note>
  要解压缩已压缩的响应,必须在调用 **HCHttpCallPerformAsync** 之前调用 **HCHttpCallResponseSetGzipCompressed**。
</Note>

### 获取 HTTP 设置

调用 **PFGetHttpSettings** 以检索当前 HTTP 配置:

```cpp theme={null}
PFHttpSettings currentSettings{};
HRESULT hr = PFGetHttpSettings(&currentSettings);
if (SUCCEEDED(hr))
{
    printf("Response compression: %s\n", currentSettings.requestResponseCompression ? "enabled" : "disabled");
}
```

## 典型初始化模式

以下示例显示了 HTTP 配置在整体 SDK 初始化流程中的位置:

```cpp theme={null}
// 1. Initialize the SDK
HRESULT hr = PFInitialize(nullptr);
hr = PFServicesInitialize(nullptr);

// 2. Configure HTTP settings before making any API calls
PFHttpRetrySettings retrySettings{};
retrySettings.allowRetry = true;
retrySettings.minimumRetryDelayInSeconds = 2;
retrySettings.timeoutWindowInSeconds = 30;
PFSetHttpRetrySettings(&retrySettings);

PFHttpSettings httpSettings{};
httpSettings.requestResponseCompression = true;
PFSetHttpSettings(&httpSettings);

// 3. Create service config and begin making API calls
// ...
```


## Related topics

- [配置](/zh-CN/services/xbox-services/player-data/stats-leaderboards/featured-stats/config/index.md)
- [HCHttpDisableAssertsForSSLValidationInDevSandboxes](/zh-CN/reference/live/httpclient/httpclient/functions/hchttpdisableassertsforsslvalidationindevsandboxes.md)
- [内容测试应用 (CTA) 串流配置概述](/zh-CN/build/core-features/common/game-streaming/game-streaming-content-test-application-stream-config.md)
- [错误代码](/zh-CN/reference/errorcodes.md)
- [为游戏配置商店列表](/zh-CN/publishing/game-publishing/tutorial-xbox-managed/how-to-create-a-store-listing.md)
