tusというHTTP/1.1上で再開可能なファイルアップロードの規格を策定するプロジェクトを見つけた。2013年4月に始まった取り組みで、リファレンス実装が多い。提案されているプロトコルでのアップロードの流れをメモする(v0.2.1準拠)
初期化(File Creation)
空のPOSTリクエストでファイルを作成する。Entity-Length ヘッダはファイル全体の長さを表す。
リクエスト
POST /files HTTP/1.1 Host: tus.example.org Content-Length: 0 Entity-Length: 100
レスポンス
新規に作成されたリソースのURIがLocationに乗って201が返ってくる。
HTTP/1.1 201 Created Location: http://tus.example.org/files/24e533e02ec3bc40c387f1a0e460e216
アップロード
HEADリクエストで、どこまでアップロードされているかを取得する(Offsetヘッダ)
リクエスト
HEAD /files/24e533e02ec3bc40c387f1a0e460e216 HTTP/1.1 Host: tus.example.org
レスポンス
HTTP/1.1 200 Ok Offset: 70
リクエスト
オフセット70バイトからPATCHメソッドでアップロードする
PATCH /files/24e533e02ec3bc40c387f1a0e460e216 HTTP/1.1 Host: tus.example.org Content-Type: application/offset+octet-stream Content-Length: 30 Offset: 70 [remaining 30 bytes]
レスポンス
HTTP/1.1 200 Ok
その他
チェックサム、並列チャンク、メタデータ、ストリームについてこれから定義予定らしい。
ファイル作成がPOSTで示されているけど、PUTでリソース指定したい時とか、リソースを更新したい時はどうするんだろうなと思った。暇があったらもうちょっと調べる。