

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

# Laden Sie die CoreHttp Basic S3-Demo herunter
<a name="core-http-s3-download-demo"></a>

**Wichtig**  <a name="deprecation-message-demo"></a>
Diese Demo wird im Amazon-FreeRTOS-Repository gehostet, das veraltet ist. Wir empfehlen, dass Sie [hier beginnen](freertos-getting-started-modular.md), wenn Sie ein neues Projekt erstellen. Wenn Sie bereits ein vorhandenes FreeRTOS-Projekt haben, das auf dem inzwischen veralteten Amazon-FreeRTOS-Repository basiert, finden Sie weitere Informationen unter. [Leitfaden zur Migration des Amazon-FreerTOS Github-Repositorys](github-repo-migration.md)

## Einführung
<a name="core-http-s3-download-demo-intro"></a>

Diese Demo zeigt, wie Sie [Bereichsanforderungen](https://tools.ietf.org/html/rfc7233) verwenden, um Dateien vom Amazon S3 S3-HTTP-Server herunterzuladen. Bereichsanforderungen werden in der CoreHTTP-API nativ unterstützt, wenn Sie sie `HTTPClient_AddRangeHeader` zur Erstellung der HTTP-Anfrage verwenden. In einer Mikrocontroller-Umgebung werden Bereichsanfragen dringend empfohlen. Durch das Herunterladen einer großen Datei in separaten Bereichen statt in einer einzigen Anfrage kann jeder Abschnitt der Datei verarbeitet werden, ohne den Netzwerk-Socket zu blockieren. Bereichsanfragen verringern das Risiko, dass Pakete verworfen werden, was erneute Übertragungen über die TCP-Verbindung erfordert, und verbessern so den Stromverbrauch des Geräts.

In diesem Beispiel wird eine [Netzwerktransportschnittstelle](https://freertos.org/network-interface.html) verwendet, die MbedTLS verwendet, um eine gegenseitig authentifizierte Verbindung zwischen einem IoT-Geräteclient, auf dem CoreHTTP ausgeführt wird, und dem Amazon S3 S3-HTTP-Server herzustellen.

**Anmerkung**  
Folgen Sie den Schritten unter, um die FreeRTOS-Demos einzurichten und auszuführen. [Erste Schritte mit FreeRTOS](freertos-getting-started.md)

### Single-Thread versus Multi-Threading
<a name="core-http-s3-download-demo-threads"></a>

Es gibt zwei CoreHTTP-Nutzungsmodelle: *Singlethread* und *Multithread (Multitasking*). Die Demo in diesem Abschnitt führt zwar die HTTP-Bibliothek in einem Thread aus, zeigt aber tatsächlich, wie CoreHTTP in einer Single-Thread-Umgebung verwendet wird (nur eine Aufgabe verwendet die HTTP-API in der Demo). Obwohl Singlethread-Anwendungen die HTTP-Bibliothek wiederholt aufrufen müssen, können Multithread-Anwendungen stattdessen HTTP-Anfragen im Hintergrund innerhalb einer Agenten- (oder Daemon-) Aufgabe senden.

## Organisation des Quellcodes
<a name="core-http-s3-download-demo-source-code"></a>

Das Demo-Projekt hat einen Namen `http_demo_s3_download.c` und ist im `freertos/demos/coreHTTP/` Verzeichnis und auf der [ GitHub](https://github.com/aws/amazon-freertos/blob/main/demos/coreHTTP/http_demo_s3_download.c)Website zu finden. 

## Konfiguration der Amazon S3 S3-HTTP-Serververbindung
<a name="core-http-s3-download-demo-configure-server"></a>

Diese Demo verwendet eine vorsignierte URL, um eine Verbindung zum Amazon S3 S3-HTTP-Server herzustellen und den Zugriff auf das herunterzuladende Objekt zu autorisieren. Die TLS-Verbindung des Amazon S3 S3-HTTP-Servers verwendet nur die Serverauthentifizierung. Auf Anwendungsebene wird der Zugriff auf das Objekt mit Parametern in der vorsignierten URL-Abfrage authentifiziert. Gehen Sie wie folgt vor, um Ihre Verbindung zu zu konfigurieren. AWS

1. Richten Sie ein AWS Konto ein:

   1. Falls Sie es noch nicht getan haben, [erstellen und aktivieren Sie ein AWS Konto](https://aws.amazon.com/premiumsupport/knowledge-center/create-and-activate-aws-account/).

   1. Konten und Berechtigungen werden mithilfe von AWS Identity and Access Management (IAM) festgelegt. Mit IAM können Sie die Berechtigungen für jeden Benutzer in Ihrem Konto verwalten. Standardmäßig verfügt ein Benutzer erst dann über Berechtigungen, wenn sie vom Root-Besitzer erteilt wurden.

      1. Informationen zum Hinzufügen eines Benutzers zu Ihrem AWS Konto finden Sie im [IAM-Benutzerhandbuch](https://docs.aws.amazon.com/IAM/latest/UserGuide/).

      1. Erteilen Sie Ihrem AWS Konto die Erlaubnis, auf FreeRTOS zuzugreifen, und AWS IoT fügen Sie diese Richtlinien hinzu:
         + Amazon S3 FullAccess

1. Erstellen Sie einen Bucket in S3, indem Sie den Schritten unter [Wie erstelle ich einen S3-Bucket](https://docs.aws.amazon.com/AmazonS3/latest/user-guide/create-bucket.html)? folgen im *Amazon Simple Storage Service Console-Benutzerhandbuch*.

1. Laden Sie eine Datei auf S3 hoch, indem Sie den Schritten unter [Wie lade ich Dateien und Ordner in einen S3-Bucket hoch?](https://docs.aws.amazon.com/AmazonS3/latest/user-guide/upload-objects.html) folgen .

1. Generieren Sie eine vorsignierte URL mithilfe des Skripts unter`FreeRTOS-Plus/Demo/coreHTTP_Windows_Simulator/Common/presigned_url_generator/presigned_urls_gen.py`. Anweisungen zur Verwendung finden Sie unter`FreeRTOS-Plus/Demo/coreHTTP_Windows_Simulator/Common/presigned_url_generator/README.md`. 

## Funktionalität
<a name="core-http-s3-download-demo-functionality"></a>

Die Demo ruft zuerst die Größe der Datei ab. Dann fordert sie jeden Bytebereich sequentiell, in einer Schleife, mit einer Bereichsgröße von an. `democonfigRANGE_REQUEST_LENGTH`

Der Quellcode für die Demo ist auf der [GitHub](https://github.com/aws/amazon-freertos/blob/main/demos/coreHTTP/http_demo_s3_download.c)Website zu finden.

### Verbindung zum Amazon S3 S3-HTTP-Server herstellen
<a name="core-http-s3-download-demo-connecting"></a>

Die Funktion [ connectToServerWithBackoffRetries()](https://github.com/aws/amazon-freertos/blob/main/demos/common/http_demo_helpers/http_demo_utils.c#L131-L170) versucht, eine TCP-Verbindung zum HTTP-Server herzustellen. Wenn die Verbindung fehlschlägt, versucht sie es nach einem Timeout erneut. Der Timeout-Wert wird exponentiell erhöht, bis die maximale Anzahl von Versuchen oder der maximale Timeout-Wert erreicht ist. `connectToServerWithBackoffRetries()`gibt einen Fehlerstatus zurück, wenn die TCP-Verbindung zum Server nach der konfigurierten Anzahl von Versuchen nicht hergestellt werden kann. 

Die Funktion `prvConnectToServer()` zeigt, wie eine Verbindung zum Amazon S3 S3-HTTP-Server ausschließlich mithilfe der Serverauthentifizierung hergestellt wird. [Es verwendet die MbedTLS-basierte Transportschnittstelle, die in der Datei FreeRTOS- \$1mbedtls.c implementiert ist. Plus/Source/Application-Protocols/network\$1transport/freertos\$1plus\$1tcp/using\$1mbedtls/using](https://github.com/FreeRTOS/FreeRTOS/blob/202012.00/FreeRTOS-Plus/Source/Application-Protocols/network_transport/freertos_plus_tcp/using_mbedtls/using_mbedtls.c) 

Den Quellcode für finden Sie auf`prvConnectToServer()`. [ GitHub](https://github.com/aws/amazon-freertos/blob/main/demos/coreHTTP/http_demo_s3_download.c#L273-L333)

### Eine Bereichsanfrage erstellen
<a name="core-http-s3-download-demo-creating-range-request"></a>

Die API-Funktion `HTTPClient_AddRangeHeader()` unterstützt die Serialisierung eines Bytebereichs in die HTTP-Anforderungsheader, um eine Bereichsanforderung zu bilden. Bereichsanfragen werden in dieser Demo verwendet, um die Dateigröße abzurufen und jeden Abschnitt der Datei anzufordern.

Die Funktion `prvGetS3ObjectFileSize()` ruft die Größe der Datei im S3-Bucket ab. Der `Connection: keep-alive` Header wird in dieser ersten Anfrage zu Amazon S3 hinzugefügt, um die Verbindung nach dem Senden der Antwort aufrechtzuerhalten. Der S3-HTTP-Server unterstützt derzeit keine HEAD-Anfragen, die eine vorsignierte URL verwenden, daher wird das 0-te Byte angefordert. Die Größe der Datei ist im `Content-Range` Header-Feld der Antwort enthalten. Eine `206 Partial Content` Antwort wird vom Server erwartet; jeder andere empfangene Antwortstatuscode ist ein Fehler.

Den Quellcode für `prvGetS3ObjectFileSize()` finden Sie unter. [ GitHub](https://github.com/aws/amazon-freertos/blob/main/demos/coreHTTP/http_demo_s3_download.c#L337-L502)

Nach dem Abrufen der Dateigröße erstellt diese Demo eine neue Bereichsanforderung für jeden Bytebereich der herunterzuladenden Datei. Es wird `HTTPClient_AddRangeHeader()` für jeden Abschnitt der Datei verwendet. 

### Senden von Bereichsanfragen und Empfangen von Antworten
<a name="core-http-s3-download-demo-send-request"></a>

Die Funktion `prvDownloadS3ObjectFile()` sendet die Bereichsanfragen in einer Schleife, bis die gesamte Datei heruntergeladen ist. Die API-Funktion `HTTPClient_Send()` sendet eine Anfrage und empfängt die Antwort synchron. Wenn die Funktion zurückkehrt, wird die Antwort in einer `xResponse` empfangen. Anschließend wird überprüft, ob der Statuscode korrekt ist, `206 Partial Content` und die Anzahl der bisher heruntergeladenen Byte wird um den `Content-Length` Header-Wert erhöht. 

Den Quellcode für `prvDownloadS3ObjectFile()` finden Sie unter. [ GitHub](https://github.com/aws/amazon-freertos/blob/main/demos/coreHTTP/http_demo_s3_download.c#L506-L651)