テストステ論

高テス協会会長が, テストステロンに関する情報をお届けします.

spray: transparent-head-requests

sprayはデフォルトでは, HEADリクエストをGETリクエストに置き換える. 従って, HEADリクエストをルーティングする場合には, transparent-head-requestsをdisableする必要がある. デフォルトの値(enabled)をオーバーライドするためには, resources/application.confに書けばよい.

spray | Documentation » 1.1.2 » spray-can » Configuration

報告したように, 私は今, sprayでS3オブジェクトストレージを作っている. S3クライアントは, リクエストに署名をつける. この署名の計算方法は, リクエストのメソッドをパラメータとする. 従って, sprayがHEADをGETに書き換えてしまうと, サーバ側で署名の再計算が出来ないことになり, Authorizationが常に失敗する.

S3のHEAD Object REST APIは, オブジェクトのメタデータのみを取得する. これは, GET Objectと比較して, entityがemptyなだけの簡易なバージョンと見ることが出来る(例えば, HEADでは明らかに必要のないRangeオプションなども受け付ける仕様となっている).

このAPIは, SDKから直接呼ぶことも出来るが, 間接的に呼ばれることもある. 例えば, Multipart uploadをするためのハイレベルAPIを提供するTransferManangerは, downloadというメソッドの奥底で, オブジェクトのメタデータのみを取得する.

まさにこのdownloadを叩くテストの中で, 不明な動きがあり, 調べてみると, HEADがGETになっていたということである.