> ## 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**](/zh-TW/services/playfab/api-references/c/pfcore/functions/pfinitialize) 和 [**PFServicesInitialize**](/zh-TW/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 錯誤](/zh-TW/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`，要求以 gzip 壓縮 API 回應。 |

### 啟用回應壓縮

啟用回應壓縮可以降低頻寬使用量，對於傳回大型承載的呼叫很有用。呼叫 **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

- [PFHttpSettings](/zh-TW/services/playfab/api-references/c/pfhttpconfig/structs/pfhttpsettings.md)
- [服務 C API 概觀 - PFHttpConfig.h](/zh-TW/services/playfab/api-references/c/pfhttpconfig/pfhttpconfig_members.md)
- [PFSetHttpSettings](/zh-TW/services/playfab/api-references/c/pfhttpconfig/functions/pfsethttpsettings.md)
- [PFGetHttpSettings](/zh-TW/services/playfab/api-references/c/pfhttpconfig/functions/pfgethttpsettings.md)
- [設定](/zh-TW/services/xbox-services/player-data/stats-leaderboards/featured-stats/config/index.md)
