2

我注意到,自 2013 年 7 月 29 日以来,GCS 网络服务开始返回“HTTP/1.1 100 Continue”而不是通常的“HTTP/1.1 200 OK”(后面是一些关于服务器的元数据)。

这在我做 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 回答