Reindirizzamento delle richieste e API REST - Amazon Simple Storage Service

Reindirizzamento delle richieste e API REST

Questa sezione descrive come gestire i reindirizzamenti HTTP tramite l'API REST di Amazon S3. Per informazioni generali sui reindirizzamenti di Amazon S3, consulta Esecuzione di richieste nella Documentazione di riferimento delle API di Amazon Simple Storage Service.

Reindirizzamenti e utenti-agenti HTTP

I programmi che utilizzano l'API REST di Amazon S3 devono gestire i reindirizzamenti a livello di applicazione o a livello di HTTP. Molte librerie di client e utenti-agenti HTTP possono essere configurate per gestire automaticamente i reindirizzamenti in modo corretto; tuttavia, in molti altri casi, le implementazioni sono incorrette o incomplete.

Prima di affidarsi a una libreria per soddisfare il requisito di reindirizzamento, testare i casi riportati di seguito:

  • Verificare che la richiesta reindirizzata (la seconda richiesta dopo la ricezione del reindirizzamento) includa tutte le intestazioni della richiesta HTTP, comprese quelle standard relative, ad esempio, ad autorizzazione e data.

  • Verificare il corretto funzionamento dei reindirizzamenti non GET, come PUT e DELETE.

  • Verificare che le richieste PUT di grandi dimensioni seguano correttamente i reindirizzamenti.

  • Se la risposta 100-continue impiega molto tempo ad arrivare, verificare che le richieste PUT seguano correttamente i reindirizzamenti.

Se il metodo di richiesta HTTP non è GET o HEAD, gli utenti-agenti HTTP rigorosamente conformi allo standard RFC 2616 potrebbero richiedere una conferma esplicita prima di seguire un reindirizzamento. In genere è sicuro seguire i reindirizzamenti generati automaticamente da Amazon S3, perché il sistema li emette solo verso host interni al dominio amazonaws.com e l'effetto della richiesta reindirizzata è uguale a quello della richiesta originale.

Reindirizzamenti e 100-continue

Configurare l'applicazione per l'utilizzo di 100-continue per le operazioni PUT consente di semplificare la gestione dei reindirizzamenti, migliorare l'efficienza ed evitare i costi che comporta inviare due volte un corpo della richiesta reindirizzato. Con l'utilizzo di 100-continue, l'applicazione non invia il corpo della richiesta finché non riceve una conferma. Se, in base alle intestazioni, il messaggio viene rifiutato, il corpo del messaggio non viene inviato. Per ulteriori informazioni su 100-continue, consulta RFC 2616 sezione 8.2.3

Nota

Secondo lo standard RFC 2616, quando si utilizza Expect: Continue con un server HTTP sconosciuto, non bisogna attendere un periodo di tempo indefinito prima inviare il corpo della richiesta, perché alcuni server HTTP non riconoscono 100-continue. Tuttavia, Amazon S3 è in grado di riconoscere se la richiesta contiene un codice Expect: Continue e risponderà con uno stato 100-continue provvisorio o con un codice di stato definitivo. Inoltre, dopo aver ricevuto il via libera provvisorio per 100-continue, non si verificheranno errori di reindirizzamento: in questo modo non si riceverà una risposta di reindirizzamento mentre è ancora in corso la scrittura del corpo della richiesta.

Esempio di reindirizzamento

In questa sezione è riportato un esempio di interazione fra client e server con utilizzo di reindirizzamenti HTTP e 100-continue.

Di seguito è riportato un esempio di operazione PUT nel 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 restituisce quanto segue:

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>

Il client segue la risposta di reindirizzamento ed emette una nuova richiesta per l'endpoint temporaneo 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 restituisce un 100-continue indicando al client di procedere con l'invio del corpo della richiesta.

HTTP/1.1 100 Continue

Il client invia il corpo della richiesta.

ha ha\n

Amazon S3 restituisce la risposta definitiva.

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