Amazon Simple Storage Service
Entwicklerhandbuch (API-Version 2006-03-01)

Anfrageumleitung und die REST API

In diesem Abschnitt wird beschrieben, wie HTTP-Umleitungen unter Verwendung der Amazon S3 REST API verarbeitet werden. Allgemeine Informationen zu Amazon S3-Umleitungen finden Sie unter Anfrageumleitung und die REST API im Amazon Simple Storage Service API Reference.

Umleitungen und HTTP-Benutzeragenten

Programme, die die Amazon S3 REST API verwenden, sollten Umleitungen auf der Anwendungsschicht oder auf der HTTP-Schicht verarbeiten. Es können viele HTTP-Client-Bibliotheken und Benutzeragenten konfiguriert werden, um Umleitungen automatisch korrekt zu verarbeiten. Viele andere beinhalten jedoch fehlerhafte oder unvollständige Implementierungen für Umleitungen.

Bevor Sie sich darauf verlassen, dass eine Bibliothek die Umleitungsanfrage erfüllt, testen Sie die folgenden Fälle:

  • Überprüfen Sie, ob alle HTTP-Anfrageheader korrekt in die Umleitungsanfrage aufgenommen wurden (die zweite Anfrage nach Empfang einer Umleitung), einschließlich der HTTP-Standards, wie beispielsweise Autorisierung und Datum.

  • Überprüfen Sie, ob auch andere als GET-Umleitungen ordnungsgemäß funktionieren, wie beispielsweise PUT und DELETE.

  • Überprüfen Sie, ob PUT-Anfragen den Umleitungen ordnungsgemäß folgen.

  • Überprüfen Sie, ob PUT-anfragenden Umleitungen ordnungsgemäß folgen, wenn die Antwort auf 100 continue lang dauert.

HTTP-Benutzeragenten, die streng konform zu RFC 2616 arbeiten, fordern möglicherweise eine explizite Bestätigung, bevor sie einer Umleitung folgen, wenn die HTTP-Anfragemethode nicht GET oder HEAD ist. Im Allgemeinen ist es sicher, von Amazon S3 erstellten Umleitungen automatisch zu folgen, da das System ausschließlich Umleitungen zu Hosts innerhalb der Domäne amazonaws.com ausgibt und der Effekt der umgeleiteten Anfrage mit dem der ursprünglichen Anfrage identisch ist.

Umleitungen und 100 Continue

Um die Verarbeitung von Umleitungen zu vereinfachen, die Effizienzen zu verbessern und die Kosten zu vermeiden, die beim doppelten Versenden eines umgeleiteten Anfragerumpfs entstehen, konfigurieren Sie Ihre Anwendung so, dass sie 100 continues für PUT-Operationen verwendet. Wenn Ihre Anwendung 100 continue verwendet, sendet sie den Anfragerumpf erst dann, wenn sie eine Bestätigung erhält. Wird die Nachricht basierend auf den Header abgewiesen, wird der Rumpf der Meldung nicht gesendet. Weitere Informationen zu 100-continue finden Sie unter RFC 2616 Abschnitt 8.2.3.

Anmerkung

Laut RFC 2616 sollten Sie nicht unendlich lange warten, bevor Sie den Anfragerumpf senden, wenn Sie Expect: Continue für einen unbekannten HTTP-Server verwenden. Der Grund dafür ist, dass einige HTTP-Server 100 continue nicht erkennen. Amazon S3 erkennt jedoch nicht, ob Ihre Anfrage Expect: Continue enthält und wird mit einem vorläufigen 100-continue-Status oder einem endgültigen Statuscode antworten. Darüber hinaus tritt kein Umleitungscode auf, nachdem die provisorische 100-continue-Genehmigung empfangen wurde. Dies hilft Ihnen, den Empfang einer Umleitungsantwort zu vermeiden, wenn Sie noch den Anfragerumpf schreiben.

Beispiel für eine Umleitung

Dieser Abschnitt bietet ein Beispiel für eine Client/Server-Interaktion mit HTTP-Umleitungen und 100 continue.

Nachfolgend finden Sie ein Beispiel für ein PUT in den quotes.s3.amazonaws.com-Bucket.

PUT /nelson.txt HTTP/1.1 Host: quotes.s3.amazonaws.com Date: Mon, 15 Oct 2007 22:18:46 +0000 Content-Length: 6 Expect: 100-continue

Amazon S3 gibt Folgendes zurück:

HTTP/1.1 307 Temporary Redirect Location: http://quotes.s3-4c25d83b.amazonaws.com/nelson.txt?rk=8d47490b Content-Type: application/xml Transfer-Encoding: chunked Date: Mon, 15 Oct 2007 22:18:46 GMT Server: AmazonS3 <?xml version="1.0" encoding="UTF-8"?> <Error> <Code>TemporaryRedirect</Code> <Message>Please re-send this request to the specified temporary endpoint. Continue to use the original request endpoint for future requests. </Message> <Endpoint>quotes.s3-4c25d83b.amazonaws.com</Endpoint> <Bucket>quotes</Bucket> </Error>

Der Client folgt der Umleitungsantwort und gibt eine neue Anfrage an den temporären Endpunkt quotes.s3-4c25d83b.amazonaws.com aus.

PUT /nelson.txt?rk=8d47490b HTTP/1.1 Host: quotes.s3-4c25d83b.amazonaws.com Date: Mon, 15 Oct 2007 22:18:46 +0000 Content-Length: 6 Expect: 100-continue

Amazon S3 gibt ein 100 continue zurück, das darauf hinweist, dass der Client damit fortfahren soll, den Anfragerumpf zu senden.

HTTP/1.1 100 Continue

Der Client sendet den Anfragerumpf.

ha ha\n

Amazon S3 gibt die endgültige Antwort zurück:

HTTP/1.1 200 OK Date: Mon, 15 Oct 2007 22:18:48 GMT ETag: "a2c8d6b872054293afd41061e93bc289" Content-Length: 0 Server: AmazonS3