Content-Length をアプリオリに知らない Skydrive にファイルをアップロードしようとしています。他のストレージ サービスでは、チャンク HTTP アップロードでこれを行うことができますが、Skydrive は常に Content-Length が無効であると文句を言います。
私が送信している完全なヘッダーは次のとおりです。
PUT /v5.0/me/skydrive/files/skydrive_test.js?overwrite=ChooseNewName HTTP/1.1
Authorization: Bearer <TOKEN_REDACTED>
host: apis.live.net
content-type: application/javascript
Connection: keep-alive
Transfer-Encoding: chunked
これが私が返す応答です:
cache-control: private, no-cache, no-store, must-revalidate
transfer-encoding: chunked
content-type: application/json; charset=UTF-8
server: Live-API/16.4.1731.327 Microsoft-HTTPAPI/2.0
x-content-type-options: nosniff
x-http-live-request-id: API.c6afda25-2d9f-4248-9f49-001ccb3a9007
x-http-live-server: BAYMSG1010836
date: Wed, 15 May 2013 14:33:00 GMT
{ "error": { "code": "request_invalid_content_length",
"message": "The value for the Content-Length header isn't valid." }}
Content-Length を設定せずに (つまり、チャンク エンコーディングを使用して) これを行う方法はありますか?
これを行うために node.js を使用していますが、REST API を使用するどの言語にも等しく適用されるはずなので、特定の言語でタグ付けしていません。
たとえば、Dropbox は Chunked Upload コマンドを提供しています: https://www.dropbox.com/developers/core/docs#chunked-upload
また、Google ドライブは、Content-Length が必要だと言っていますが、再開可能なアップロード API には必要ありません: https://developers.google.com/drive/manage-uploads#resumable
不足している API はありますか?
編集:私が試したこと: Content-Length: 0 を設定すると機能しますが、ファイルはゼロバイトです。Content-length:0 および Transfer-Encoding: chunked を設定すると、上記の元のエラーが発生します。