요청 리디렉션 및 REST API - Amazon Simple Storage Service

요청 리디렉션 및 REST API

이 단원에서는 Amazon S3 REST API를 사용하여 HTTP 리디렉션을 처리하는 방법에 대해 설명합니다. Amazon S3 리디렉션에 대한 일반 정보는 Amazon Simple Storage Service API 참조의 요청 만들기 섹션을 참조하세요.

리디렉션 및 HTTP 사용자 에이전트

Amazon S3 REST API를 사용하는 프로그램은 애플리케이션 계층 또는 HTTP 계층에서 리디렉션을 처리해야 합니다. 리디렉션을 자동으로 올바르게 처리하기 위해 많은 HTTP 클라이언트 라이브러리 및 사용자 에이전트를 구성할 수 있지만 리디렉션 구현이 잘못되거나 불완전한 경우도 많습니다.

라이브러리에 의존하여 리디렉션 요구 사항을 충족시키기 전에 다음 사례를 테스트하십시오.

  • 모든 HTTP 요청 헤더가 권한 부여 및 날짜와 같은 HTTP 표준을 포함하며 리디렉션된 요청(리디렉션을 받은 후의 두 번째 요청)에 올바르게 포함되어 있는지 확인합니다.

  • PUT 및 DELETE와 같은 비GET 리디렉션이 올바르게 작동하는지 확인합니다.

  • 대형 PUT 요청이 올바르게 리디렉션 뒤에 오는지 확인합니다.

  • 100-Continue 응답이 도착하는 데 오랜 시간이 걸리는 경우 PUT 요청이 올바르게 리디렉션 뒤에 오는지 확인합니다.

HTTP 요청 메서드가 GET 또는 HEAD가 아니면 RFC 2616을 엄격히 준수하는 HTTP 사용자 에이전트에서 리디렉션을 따르기 전에 명시적 확인을 요구할 수 있습니다. Amazon S3에서 자동으로 생성된 리디렉션을 따르는 것은 일반적으로 안전합니다. 시스템에서 amazonaws.com 도메인 내에 있는 호스트에 대해서만 리디렉션을 발행하며 리디렉션된 요청의 효과가 원래 요청의 효과와 같기 때문입니다.

리디렉션 및 100-Continue

리디렉션 처리를 간소화하고, 효율성을 개선하고, 리디렉션된 요청 본문을 두 번 보내는 작업에 수반되는 비용을 피하려면 PUT 작업에 대해 100-Continue를 사용하도록 애플리케이션을 구성하십시오. 애플리케이션에서 100-Continue를 사용하면 승인을 받을 때까지 요청 본문을 보내지 않습니다. 헤더를 기반으로 메시지가 거부될 경우 메시지의 본문이 전송되지 않습니다. 100-Continue에 대한 자세한 내용은 RFC 2616 Section 8.2.3을 참조하십시오.

참고

RFC 2616에 따르면 알 수 없는 HTTP 서버에 Expect: Continue를 사용할 때 요청 본문을 보내기 전에 무한정으로 기다리지 않아야 합니다. 이는 일부 HTTP 서버에서 100-Continue가 인식되지 않기 때문입니다. 그러나 Amazon S3에서는 요청에 Expect: Continue가 포함되어 있는지를 인식하며 임시 100-Continue 상태 또는 최종 상태 코드로 응답합니다. 또한 임시 100-Continue 진행 신호를 받은 후에는 리디렉션 오류가 발생하지 않습니다. 이는 아직 요청 본문을 작성하고 있는 동안 리디렉션 응답을 받는 것을 방지하는 데 도움이 됩니다.

리디렉션 예제

이 단원에서는 HTTP 리디렉션 및 100-Continue를 사용한 클라이언트-서버 상호 작용의 예제를 제공합니다.

다음은 quotes.s3.amazonaws.com 버킷에 대한 샘플 PUT입니다.

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에서 다음을 반환합니다.

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>

클라이언트에서 리디렉션 응답을 따르고 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은 클라이언트가 요청 본문 전송을 진행해야 함을 나타내는 100-continue를 반환합니다.

HTTP/1.1 100 Continue

클라이언트에서 요청 본문을 보냅니다.

ha ha\n

Amazon S3에서 최종 응답을 반환합니다.

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