2

2013 年 7 月 29 日以降、GCS Web サービスは通常の「HTTP/1.1 200 OK」ではなく「HTTP/1.1 100 Continue」を返すようになりました (その後にサーバーに関するメタデータが続きます)。

これは、私の側で PUT オブジェクトを実行したときに見られます。

私の質問は、どうすればこれを解決できますか? リクエストを再送信するだけですか?リクエストを別の場所にリダイレクトしますか?


私のリクエストは次のようになります。

    $headers = array('Host: '.$bucket.'.commondatastorage.googleapis.com',
                    'Date: '.$timestamp, $version_header, 'Content-Type: text/plain',
                    $project_header, 'Content-Length: '.filesize($objectPath),
                    'Authorization: OAuth '.$accessToken);

    $c   = curl_init();
    curl_setopt($c, CURLOPT_URL, $url);
    curl_setopt($c, CURLOPT_PUT, 1);
    curl_setopt($c, CURLOPT_INFILE, $fp); 
    curl_setopt($c, CURLOPT_INFILESIZE, filesize($objectPath)); 
    curl_setopt($c, CURLOPT_HEADER, 1);
    curl_setopt($c, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($c, CURLOPT_CUSTOMREQUEST, "PUT");
    curl_setopt($c, CURLOPT_TIMEOUT, 60); //timeout in 60s
    curl_setopt($c, CURLOPT_HTTPHEADER, $headers);
    $response = curl_exec($c);

4

1 に答える 1

4

これは HTTP 1.1 の機能です。

基本的に、クライアントは追加の行を含むヘッダーのみを送信します。

Expect: 100-continue

...そして、数百ミリ秒の間、本文を送信して待機します。タイムアウトになるか100 Continue、サーバーからの応答がある場合、クライアントはアップロードを続行します。 がある場合417 Expectation Failed、アップロードは中止されます。

これにより、サーバーはアップロード前にリクエストを受け入れるかどうかを確認できます。たとえば、ファイルのサイズが Google Cloud Storage の残りの割り当てよりも大きい場合、拒否される前にアップロードしても意味がありません。

アップロードが完了すると、200 OK通常どおり追加の応答が返されます。

編集:

PHPを実行しているようです。PHP/Curl でのこれに関する詳細は、この質問で入手できます。

于 2013-08-01T18:59:21.620 に答える