https://www.simulationroom999.com/blog/amazons3-rest-packet-analysis/
はじめに
今回は、AmazonS3からのDownload。
FTP のGET相当となる。。
S3 仕様としてはGET object に相当。
aws s3 cp s3://XXXXXXXXXXXXXXX/folder/text2.txt ./
ちなみにawscli 的には指定ディレクトリ以下全部Download指示ができるが、REST 的にはGET Bucket とGET object の繰り返しになる。
リクエストパケット
GET /XXXXXXXXXXXXXXX/folder/test2.txt HTTP/1.1 Host: 192.168.5.128 Accept-Encoding: identity X-Amz-Content-SHA256: e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 X-Amz-Date: 20200310T032729Z Authorization: AWS4-HMAC-SHA256 Credential=AAAAAAAAAAAAAAAAAAAA/20200310/ap-northeast-1/s3/aws4_request, SignedHeaders=host;x-amz-content-sha256;x-amz-date, Signature=62faf3270199a123253c71c080076d7eb72d5e761bd92330dbc122b57d5d4336 User-Agent: aws-cli/1.16.51 Python/2.7.15 Windows/10 botocore/1.12.41
レスポンスパケット
HTTP/1.1 200 OK Accept-Ranges: bytes Content-Length: 0 Content-Security-Policy: block-all-mixed-content Content-Type: text/plain Etag: "00000000000000000000000000000000-1" Last-Modified: Tue, 10 Mar 2020 23:06:04 GMT Vary: Origin X-Amz-Bucket-Region: ap-northeast-1 X-Amz-Request-Id: 156DA09E6B6F3169 X-Xss-Protection: 1; mode=block Date: Tue, 10 Mar 2020 03:27:29 GMT <!-- ※本来ならここにHTTPBODYが付くが0byteファイルなため何もいない。-->
裏技
レスポンスパケットはファイルそのものが取れるので、これも組込み系だとバッファ不足とかで死ぬ場合があり得る。
分割できると嬉しいのだが、REST的なCRUDとしてはこの想定は存在しない。
が、
S3とかRESTとかの仕様というよりもHTTPの仕様としてpartial contentsという仕様がある。
HTTPヘッダに以下を追加する。(例の場合はファイル先頭0byte目から500byteまでをよこせって意味になる)
Range:bytes=0-500
S3とかRESTとかよりも下位のレイヤーの仕様であるため、S3に対しても有効。
一応、S3のGet objectのパラメータとして規定はされているが、結局のところ「RFC2616 を参照」になっている。
コメント