> ## 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.

# GDK 与 XDK 之间的 Web 请求差异

> Microsoft 游戏开发工具包与 XBOX One Software Development Kit 中 Web 请求的差异

本文介绍 Microsoft 游戏开发工具包 (GDK) 与 XBOX One Software Development Kit 之间 Web 请求 API 的差异。`WinHttp` 是取代 `IXMLHttpRequest2` (IXHR2) 和 `IMessageWebSocket` API 的新 Win32 HTTP API。`WinHttp` 是比 IXHR2 更底层的 API，因此相较 IXHR2 缺少一些功能，例如内容缓存、cookies、自动插入 XBOX 服务令牌以及自动安全强制。但作为回报，`WinHttp` 由于位于进程内、开销更小并避免过多内存拷贝，性能要好得多。此外，`WinHttp` 在同一 API 中支持 HTTP/1.1、HTTP/2 和 WebSockets，并包含 IXHR2 缺少的功能，例如分块上传。

`XCurl` 是 Microsoft 游戏开发工具包 (GDK) 的 HTTP API。`XCurl` 通过在 `WinHttp` 之上封装的适配器提供更简单的 API。`XCurl` 的 API 面与 [libCurl](https://curl.haxx.se/libcurl/) 大致相符。`XCurl` 自动处理安全最佳实践并处理网络初始化，从而简化了游戏开发。

除 `WinHttp` 外，XBOX Services API (`XSAPI`) 提供了简单的 [http\_call](/reference/live/xsapi-c/http_call_c/http_call_c_members) 系列 API，可用于向你自己的自定义服务器发起 REST HTTP 请求。我们建议对你游戏发向自有服务和 XBOX 服务的任何 REST 请求使用 `XSAPI`。
有关 `XSAPI` 的更多信息，请参阅 [XBOX 服务 API 入门](/services/xbox-services/fundamentals/xbox-services-api/live-gs-xbl-apis)。

GDK 包含一个 [SimpleWinHttp 示例](https://aka.ms/gdkdl)，它将 WinHTTP 使用抽象为简单的 Microsoft 游戏开发工具包 (GDK) 异步模型。我们建议以此示例作为你自有 WinHTTP 实现的起点，因为它涵盖了构建安全、健壮的 WinHTTP 集成所涉及的许多细节。

有关如何使用 `XCurl` 或 `WinHttp` 的更多信息，请参阅 [HTTP 与 Web sockets](/build/console-features/networking/web-requests/http-networking)。

## 网络初始化

你的游戏会在 Game OS 启动过程中尽可能早地启动。你可以开始从硬盘加载资源并开始初始化图形堆栈。但你的代码在网络服务启动之前就在运行，因此在一段时间内使用 Win32 网络 API 是不安全的。我们将此时间段定义为 *网络初始化* 期，之后网络被视为已初始化。网络初始化通常需要几秒钟，这在你的代码中可能会很明显。

在 XBOX One ERA 游戏中，网络初始化会隐式且任意地阻塞本应实时安全的网络 API，例如 `WSAStartup` 或 `bind`。在 Microsoft 游戏开发工具包 (GDK) 应用中，网络初始化现在是一个显式概念，你必须与之交互才能使用任何 Win32 网络或安全 API。

Microsoft 游戏开发工具包 (GDK) 游戏必须等待 `XNetworkingConnectivityHint::networkInitialized` 布尔值被设为 `true` 后，再调用 `Winsock`、`WinHttp`、`IP Helper`、`BCrypt`、`WinCrypt`、`Schannel` 或任何其他 Win32 网络 API。在网络初始化完成前调用其中任一 API 会导致不确定的行为，甚至可能出现随机的进程崩溃。

此外，同样的概念适用于所有挂起/恢复周期。挂起时，Microsoft 游戏开发工具包 (GDK) 游戏应关闭所有网络和安全句柄。从网络角度看，Microsoft 游戏开发工具包 (GDK) 游戏应像初次启动一样处理恢复处理程序，再次等待网络完成初始化。

有关等待网络初始化的代码示例等更多信息，请参阅 [网络初始化与连接性](/build/console-features/networking/initialization-connectivity-networking)。

## 另请参阅

[网络初始化与连接性](/build/console-features/networking/initialization-connectivity-networking)

[通信安全概述](/build/game-principles/security/communication-security-overview)

[XBOX 服务 API 入门](/services/xbox-services/fundamentals/xbox-services-api/live-gs-xbl-apis)

[http\_call\_c](/reference/live/xsapi-c/http_call_c/http_call_c_members)


## Related topics

- [GDK 与 Steamworks 之间的概念差异](/zh-CN/build/steam-porting-guide/conceptual-differences.md)
- [Steam 移植指南概览](/zh-CN/build/steam-porting-guide/overview.md)
- [将 XDK 网络迁移到 XBOX GDK](/zh-CN/build/console-features/networking/xdk-migration/index.md)
- [Web 请求](/zh-CN/build/console-features/networking/web-requests/web-requests-toc.md)
- [XBOX One Software Development Kit 迁移指南](/zh-CN/build/console-features/networking/xdk-migration/xdk-migration-toc.md)
