本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
coreHTTP 基本 S3 下载演示
重要
这是《FreeRTOS 用户指南》的存档版本,可用于 FreeRTOS 版本 202210.00。有关本文档的最新版本,请参阅《FreeRTOS 用户指南》。
简介
此演示展示了如何使用范围请求HTTPClient_AddRangeHeader
创建 HTTP 请求时,coreHTTP API 原生支持范围请求。对于微控制器环境,强烈建议使用范围要求。通过在不同的范围内下载大文件(而不是在单个请求中下载),可以在不阻塞网络套接字的情况下处理文件的各个部分。范围请求降低了丢弃数据包的风险(而丢弃的数据包要求在 TCP 连接上重新传输),因此可以改善设备的功耗。
此示例使用一个网络传输接口
注意
要设置和运行 FreeRTOS 演示,请按照开始使用 FreeRTOS中的步骤操作。
单线程与多线程
coreHTTP 有两种使用模式,即单线程和多线程(多任务处理)。尽管本节中的演示在线程中运行 HTTP 库,但它实际上演示了如何在单线程环境中使用 coreHTTP(演示中只有一个任务使用 HTTP API)。尽管单线程应用程序必须重复调用 HTTP 库,但多线程应用程序可以在后台的代理(或进程守护程序)任务中发送 HTTP 请求。
源代码组织
演示项目已命名http_demo_s3_download.c
,可以在
目录和 GitHubfreertos
/demos/coreHTTP/
配置 Amazon S3 HTTP 服务器连接
此演示使用预签名 URL 连接到 Amazon S3 HTTP 服务器并授权访问要下载的对象。Amazon S3 HTTP 服务器的 TLS 连接仅使用服务器身份验证。在应用程序级别,使用预签名 URL 查询中的参数对对象的访问进行身份验证。请按照以下步骤配置与 AWS的连接。
注册获取 AWS 账户
如果您没有 AWS 账户,请完成以下步骤来创建一个。
要注册 AWS 账户
按照屏幕上的说明操作。
注册过程的一部分涉及接听电话或短信,并在电话键盘上输入验证码。
当您注册时 AWS 账户,就会创建AWS 账户根用户一个。根用户有权访问该账户中的所有 AWS 服务 和资源。作为最佳安全实践,请为用户分配管理访问权限,并且只使用根用户来执行需要根用户访问权限的任务。
AWS 注册过程完成后会向您发送一封确认电子邮件。您可以随时前往 https://aws.amazon.com/
创建具有管理访问权限的用户
注册后,请保护您的安全 AWS 账户 AWS 账户根用户 AWS IAM Identity Center,启用并创建管理用户,这样您就不会使用 root 用户执行日常任务。
保护你的 AWS 账户根用户
-
选择 Root 用户并输入您的 AWS 账户 电子邮件地址,以账户所有者的身份登录。AWS Management Console
在下一页上,输入您的密码。 要获取使用根用户登录方面的帮助,请参阅《AWS 登录 用户指南》中的 Signing in as the root user。
-
为您的根用户启用多重身份验证(MFA)。
有关说明,请参阅 I A M 用户指南中的为 AWS 账户 根用户启用虚拟 MFA 设备(控制台)。
创建具有管理访问权限的用户
-
启用 IAM Identity Center。
有关说明,请参阅《AWS IAM Identity Center 用户指南》中的 Enabling AWS IAM Identity Center。
-
在 IAM Identity Center 中,为用户授予管理访问权限。
有关使用 IAM Identity Center 目录 作为身份源的教程,请参阅《用户指南》 IAM Identity Center 目录中的使用默认设置配置AWS IAM Identity Center 用户访问权限。
以具有管理访问权限的用户身份登录
-
要使用您的 IAM Identity Center 用户身份登录,请使用您在创建 IAM Identity Center 用户时发送到您的电子邮件地址的登录网址。
有关使用 IAM Identity Center 用户登录的帮助,请参阅AWS 登录 用户指南中的登录 AWS 访问门户。
将访问权限分配给其他用户
-
在 IAM Identity Center 中,创建一个权限集,该权限集遵循应用最低权限的最佳做法。
有关说明,请参阅《AWS IAM Identity Center 用户指南》中的 Create a permission set。
-
将用户分配到一个组,然后为该组分配单点登录访问权限。
有关说明,请参阅《AWS IAM Identity Center 用户指南》中的 Add groups。
要提供访问权限,请为您的用户、组或角色添加权限:
-
中的用户和群组 AWS IAM Identity Center:
创建权限集合。按照《AWS IAM Identity Center 用户指南》中创建权限集的说明进行操作。
-
通过身份提供商在 IAM 中托管的用户:
创建适用于身份联合验证的角色。按照《IAM 用户指南》中针对第三方身份提供商创建角色(联合身份验证)的说明进行操作。
-
IAM 用户:
-
创建您的用户可以担任的角色。按照《IAM 用户指南》中为 IAM 用户创建角色的说明进行操作。
-
(不推荐使用)将策略直接附加到用户或将用户添加到用户组。按照《IAM 用户指南》中向用户添加权限(控制台)中的说明进行操作。
-
-
按照《Amazon Simple Storage Service 控制台用户指南》的如何创建 S3 存储桶中的步骤,在 S3 中创建一个存储桶。
-
按照如何将文件和文件夹上传至 S3 存储桶中的步骤,将文件上传到 S3。
-
使用
FreeRTOS-Plus/Demo/coreHTTP_Windows_Simulator/Common/presigned_url_generator/presigned_urls_gen.py
中的脚本生成预签名 URL。有关使用说明,请参阅FreeRTOS-Plus/Demo/coreHTTP_Windows_Simulator/Common/presigned_url_generator/README.md
。
功能
首先,该演示检索文件的大小。然后,它会在循环中按顺序请求每个字节范围,范围大小为 democonfigRANGE_REQUEST_LENGTH
。
该演示的源代码可以在GitHub
连接到 Amazon S3 HTTP 服务器
函数 connectToServerWithBackoffRetries()connectToServerWithBackoffRetries()
函数将返回失败状态。
prvConnectToServer()
函数演示如何仅使用服务器身份验证来建立与 Amazon S3 HTTP 服务器的连接。它使用基于 mbedtls 的传输接口,该接口在 freeRTOS-_mbedtls.c 文件中实现。Plus/Source/Application-Protocols/network_transport/freertos_plus_tcp/using_mbedtls/using
的源代码prvConnectToServer()
可以在上找到 GitHub
创建范围请求
API 函数 HTTPClient_AddRangeHeader()
支持将字节范围序列化为 HTTP 请求标头以构建范围请求。此演示使用范围请求来检索文件大小并请求文件的各个部分。
prvGetS3ObjectFileSize()
函数检索 S3 存储桶中文件的大小。Connection: keep-alive
标头已添加到 Amazon S3 的第一个请求中,以便在发送响应后保持连接畅通。目前,S3 HTTP 服务器不支持使用预签名 URL 的 HEAD 请求,因此请求第 0 个字节。文件的大小包含在响应的 Content-Range
标头字段中。服务器的预期响应为 206 Partial Content
;收到任何其他响应状态代码均为错误。
的源代码prvGetS3ObjectFileSize()
可以在上找到 GitHub
检索文件大小后,此演示会为要下载的文件的每个字节范围创建一个新的范围请求。对于文件的每个部分,它都会使用 HTTPClient_AddRangeHeader()
。
发送范围请求和接收响应
函数 prvDownloadS3ObjectFile()
循环发送范围请求,直到整个文件下载完成。API 函数 HTTPClient_Send()
同步发送请求并接收响应。当函数返回时,响应在 xResponse
中接收。然后验证状态代码是否为 206 Partial Content
,并且目前已下载的字节数按 Content-Length
标头值递增。
的源代码prvDownloadS3ObjectFile()
可以在上找到 GitHub