

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# coreHTTP 双向身份验证演示
<a name="core-http-ma-demo"></a>

**重要**  <a name="deprecation-message-demo"></a>
该演示托管在已弃用的 Amazon-FreeRTOS 存储库中。当您创建新项目时，我们建议[从此处开始](freertos-getting-started-modular.md)。如果您已经有一个基于现已弃用的 Amazon-FreeRTOS 存储库的 FreeRTOS 项目，请参阅 [Amazon-FreeRTOS Github 存储库迁移指南](github-repo-migration.md)。

## 简介
<a name="core-http-ma-demo-intro"></a>

coreMQTT（双向身份验证）演示项目展示了如何使用在客户端与服务器之间具有双向身份验证的 TLS 建立与 HTTP 服务器的连接。此演示使用基于 mbedTLS 的传输接口实现来建立经过服务器和客户端身份验证的 TLS 连接，并演示了 HTTP 中的请求响应工作流程。

**注意**  
要设置和运行 FreeRTOS 演示，请按照[开始使用 FreeRTOS](freertos-getting-started.md)中的步骤操作。

## 功能
<a name="core-http-ma-demo-functionality"></a>

此演示创建一个应用程序任务，其示例演示如何完成以下操作：
+ 连接到 AWS IoT 终端上的 HTTP 服务器。
+ 发送 POST 请求。
+ 接收响应。
+ 断开与服务器的连接。

完成这些步骤后，演示将生成类似于以下屏幕截图的输出。

![\[显示 AWS IoT 演示初始化、TLS 会话建立、HTTP POST 请求和表示成功完成演示的内存指标的日志输出。\]](http://docs.aws.amazon.com/zh_cn/freertos/latest/userguide/images/coreHTTP.output.png)


 AWS IoT 控制台生成类似于以下屏幕截图的输出。

![\[AWS IoT 控制台显示世界标准时间 2020 年 11 月 20 日 19:09:09 向某个主题发布的 “来自 AWS IoT 控制台的你好” 消息。\]](http://docs.aws.amazon.com/zh_cn/freertos/latest/userguide/images/coreHTTP.console.png)


## 源代码组织
<a name="core-http-s3-ma-demo-source-code-organization"></a>

演示源文件已命名`http_demo_mutual_auth.c`，可以在`freertos/demos/coreHTTP/`目录和[ GitHub](https://github.com/aws/amazon-freertos/blob/main/demos/coreHTTP/http_demo_mutual_auth.c)网站上找到。

## 正在连接到 AWS IoT HTTP 服务器
<a name="core-http-ma-demo-connecting"></a>

该[ connectToServerWithBackoffRetries](https://github.com/aws/amazon-freertos/blob/main/demos/common/http_demo_helpers/http_demo_utils.c#L131-L170)函数尝试与 AWS IoT HTTP 服务器建立相互身份验证的 TLS 连接。如果连接失败，则会在超时后重试。超时值呈指数级增长，直到达到最大尝试次数或达到最大超时值。`RetryUtils_BackoffAndSleep` 函数提供指数级增长的超时值，并在达到最大尝试次数时返回 `RetryUtilsRetriesExhausted`。如果在配置的尝试次数后仍无法建立与代理的 TLS 连接，则 `connectToServerWithBackoffRetries` 函数将返回失败状态。

## 发送 HTTP 请求和接收响应
<a name="core-http-ma-demo-send-receive"></a>

[ prvSendHttp请求](https://github.com/aws/amazon-freertos/blob/main/demos/coreHTTP/http_demo_mutual_auth.c#L402-L507)函数演示如何向 AWS IoT HTTP 服务器发送 POST 请求。有关向 REST API 发出请求的更多信息 AWS IoT，请参阅[设备通信协议-HTTPS](https://docs.aws.amazon.com/iot/latest/developerguide/http.html)。响应是通过相同的 CoreHTTP API 调用 `HTTPClient_Send` 接收。