2013-08-01 98 views
2

我注意到,自2013年7月29日以来,GCS webservice已经开始返回“HTTP/1.1 100 Continue”而不是通常的“HTTP/1.1 200 OK “(后面是关于服务器的一些元数据)。Google Cloud Storage:上传对象正在返回HTTP/1.1 100继续

这是在我的一端做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); 

+0

您是否正在发送'Expect:100-continue'标题? –

+0

我不这么认为。我会用我的请求的样子更新我的问题。 –

+0

如果您不需要,您必须禁用Expect标题。看到链接的答案。 – jterrace

回答

4

这是HTTP 1.1的功能;

基本上,您的客户发送标题只有一个额外的行;

Expect: 100-continue 

...并等待发布几百毫秒的身体。如果超时到期或服务器有响应,客户端继续上传,如果有417 Expectation Failed,上传将中止。

这允许服务器在上传之前检查它是否会接受请求。例如,如果文件大小大于Google云端存储的剩余配额,则在被拒绝之前上传文件将毫无用处。

上传完成后,您将照常收到额外的200 OK响应。

编辑:

我看到你正在运行PHP。有关PHP/Curl的更多信息,请参阅this question

+0

如果我没有在我的请求中发送“Expect:100-continue”标题并仍然收到“HTTP/1.1 100 Continue”作为响应,这是否意味着Web服务中存在一个错误? –

+1

@timberspine CURL似乎根据链接的PHP问题自行完成。有一种方法可以通过设置一个空的'Expect:'头来禁用它。 –

+3

刚刚测试过这个,空的Expect头文件解决方案效果很好。再次感谢Joachim和jterrace! –

相关问题