Redirection de demande et API REST - Amazon Simple Storage Service

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Redirection de demande et API REST

Cette section décrit comment traiter les redirections HTTP à l'aide de l'API REST Amazon S3. Pour obtenir des informations générales sur les redirections Amazon S3, veuillez consulter Demandes dans la Référence d'API Amazon Simple Storage Service.

Redirections et agents utilisateurs HTTP

Les programmes qui utilisent l'API REST Amazon S3 doivent traiter les redirections au niveau de la couche applicative ou de la couche HTTP. De nombreux agents utilisateurs et bibliothèques client HTTP peuvent être configurés pour traiter automatiquement correctement les redirections. Toutefois, de nombreux autres présentent des implémentations de redirection incorrectes ou incomplètes.

Avant de faire confiance à une bibliothèque pour s'acquitter de l'obligation de redirection, testez les cas suivants :

  • Vérifiez que tous les en-têtes de demande HTTP sont correctement inclus dans la demande redirigée (la seconde demande après réception d'une redirection), y compris les standards HTTP tels que Authorization et Date.

  • Vérifiez que les redirections autres que GET, telles que PUT et DELETE, fonctionnent correctement.

  • Vérifiez que les demandes PUT de grande taille suivent correctement les redirections.

  • Vérifiez que les demandes PUT suivent correctement les redirections si la réponse 100-continue met longtemps à arriver.

Les agents utilisateurs HTTP qui respectent scrupuleusement la RFC 2616 peuvent nécessiter une confirmation explicite avant de suivre une redirection lorsque la méthode de demande HTTP n'est pas GET ni HEAD. Il est généralement sans danger de suivre les redirections générées automatiquement par Amazon S3, car le système émet des redirections uniquement vers les hôtes situés au sein du domaine amazonaws.com et l'effet de la demande redirigée est identique à celui de la demande d'origine.

Redirections et 100-continue

Pour simplifier le traitement de la redirection, améliorer l'efficacité et éviter les coûts associés à l'envoi répété du corps d'une demande redirigée, configurez l'application pour qu'elle utilise des expressions 100-continue pour les opérations PUT. Lorsque votre application utilise 100-continue, elle n'envoie pas le corps de la demande tant qu'elle ne reçoit pas d'accusé de réception. Si le message est rejeté sur la base des en-têtes, le corps du message n'est pas envoyé. Pour plus d'informations sur 100-continue, consultez la RFC 2616, section 8.2.3

Note

Selon la RFC 2616, lorsque vous utilisez Expect: Continue avec un serveur HTTP inconnu, vous ne devez pas attendre un temps indéfini avant d'envoyer le corps de la demande. Cela est dû au fait que certains serveurs HTTP ne reconnaissent pas l'expression 100-continue. Toutefois, Amazon S3 reconnaît que la demande contient une expression Expect: Continue et répond avec un statut 100-continue provisoire ou un code de statut final. En outre, aucune erreur de redirection ne surviendra après la réception de l'autorisation provisoire 100-continue. Cela vous aidera à éviter de recevoir une réponse de redirection alors que vous écrivez encore le corps de la demande.

Exemple de redirection

Cette section fournit un exemple d'interaction client-serveur utilisant des redirections HTTP et 100-continue.

Voici un exemple de commande PUT pour le compartiment quotes.s3.amazonaws.com.

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 retourne les informations suivantes :

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>

Le client suit la réponse de redirection et émet une nouvelle demande adressée au point de terminaison temporaire quotes.s3-4c25d83b.amazonaws.com.

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 retourne une expression 100-continue indiquant que le client doit à présent envoyer le corps de la demande.

HTTP/1.1 100 Continue

Le client envoie le corps de la demande.

ha ha\n

Amazon S3 retourne la réponse finale.

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