Solicitar redireccionamiento y la API de REST - Amazon Simple Storage Service

Solicitar redireccionamiento y la API de REST

En esta sección se describe cómo administrar el redireccionamiento HTTP mediante la API de REST de Amazon S3. Para obtener información general sobre los redireccionamientos de Amazon S3, consulte Realizar solicitudes en la Referencia de la API de Amazon Simple Storage Service.

Redireccionamientos y agentes de usuario HTTP

Los programas que usan la API de REST de Amazon S3 deberían poder ocuparse de los redireccionamientos o bien en la capa de aplicación o bien en la capa HTTP. Muchas bibliotecas clientes y agentes de usuario HTTP pueden configurarse para administrar los redireccionamientos de forma correcta y automática. Sin embargo, hay muchas otras que tienen implementaciones de los redireccionamientos incorrectas o incompletas.

Antes de depender de una biblioteca para cumplir el requisito de redireccionamiento, pruebe lo siguiente:

  • Compruebe que todos los encabezados de solicitudes HTTP estén incluidos correctamente en la solicitud redirigida (la segunda solicitud tras haber recibido un redireccionamiento) incluidos los estándares HTTP como la autorización y la fecha.

  • Compruebe que los redireccionamientos que no sean GET, como PUT o DELETE, funcionen correctamente.

  • Compruebe que las solicitudes PUT grandes sigan los redireccionamientos correctamente.

  • Compruebe que las solicitudes PUT sigan los redireccionamientos correctamente si la respuesta 100-continue tarda demasiado en llegar.

Los agentes de usuario HTTP que se ajusten estrictamente a RFC 2616 podrían necesitar una confirmación explícita antes de seguir un redireccionamiento si el método de solicitud HTTP no es GET o HEAD. Normalmente, es seguro seguir los redireccionamientos generados por Amazon S3 automáticamente, ya que el sistema generará redireccionamientos solamente a los hosts del dominio amazonaws.com, y el efecto de la solicitud redirigida será el mismo que el de la solicitud original.

Redireccionamientos y 100-continue

Para administrar el redireccionamiento de forma más sencilla, mejorar la eficacia y evitar los costos asociados con el envío duplicado del cuerpo de una solicitud redirigida, configure su aplicación para usar 100-continues en operaciones PUT. Cuando su aplicación usa 100-continue, no envía el cuerpo de la solicitud hasta que recibe una confirmación. Si el mensaje se rechaza en función de los encabezados, el cuerpo del mismo no se llega a enviar. Para obtener más información sobre 100-continue, visite RFC 2616 Sección 8.2.3

nota

Según RFC 2616, al usar Expect: Continue sin un servidor HTTP conocido, no debería esperar un periodo indefinido para enviar el cuerpo de la solicitud. Esto se debe a que algunos servidores HTTP no reconocen 100-continue. Sin embargo, Amazon S3 sí que reconoce si su solicitud contiene un Expect: Continue y responderá con un estado 100-continue provisional o un código de estado final. Además, no se producirá ningún error de redireccionamiento tras recibir la autorización provisional del 100-continue. Así, le resultará más fácil evitar recibir una respuesta de redireccionamiento mientras sigue escribiendo el cuerpo de la solicitud.

Ejemplo de redireccionamiento

En esta sección se ofrece un ejemplo de interacción cliente-servidor mediante redireccionamientos HTTP y 100-continue.

A continuación mostramos un ejemplo de PUT al bucket 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 devuelve lo siguiente:

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>

El cliente sigue la respuesta de redireccionamiento y envía una nueva solicitud al punto de conexión temporal 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 devuelve un 100-continue que indica que el cliente debería continuar con el envío del cuerpo de la solicitud.

HTTP/1.1 100 Continue

El cliente envía el cuerpo de la solicitud.

ha ha\n

Amazon S3 devuelve la respuesta final.

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