2013-08-01 97 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! –

相關問題