【问题标题】:Google Cloud Storage: Upload Object is returning HTTP/1.1 100 Continue谷歌云存储:上传对象返回 HTTP/1.1 100 继续
【发布时间】:2013-08-01 18:37:17
【问题描述】:

我注意到,自 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);

【问题讨论】:

  • 您发送的是Expect: 100-continue 标头吗?
  • 我不这么认为。我将根据我的请求更新我的问题。
  • 如果您不想要它,您必须禁用 Expect 标头。请参阅链接的 SO 答案。
  • 据我所知,PHP 客户端实现并没有改变,正如您从我的代码中看到的那样,我没有发送“Expect: 100-continue”标头。在 29 日之前,响应是 200 OK,直到 29 日之后才开始发生这种情况。此特定模块没有发生任何代码更改。
  • 您的 PHP 代码 正在 发送 Expect 标头,因为 PHP curl 客户端默认发送它。最近添加了对 Expect 标头的服务器端支持,这就是您看到它的原因。如果您想恢复旧的行为,请修改您的代码以发送一个空白的 Expect 标头,下面的答案中列出了一个示例。

标签: php http curl google-cloud-storage


【解决方案1】:

这是 HTTP 1.1 的一个特性;

基本上,您的客户端仅发送 标题 并带有额外的一行;

Expect: 100-continue

...并等待发布正文数百毫秒。如果超时或服务器有100 Continue 响应,则客户端继续上传,如果有417 Expectation Failed,则中止上传。

这允许服务器在上传之前检查它是否会接受请求。例如,如果一个文件的大小超过了 Google Cloud Storage 的剩余配额,那么在被拒绝之前上传它是没有用的。

上传完成后,您会像往常一样收到额外的200 OK 回复。

编辑:

我看到您正在运行 PHP。有关 PHP/Curl 的更多信息,请访问 this question

【讨论】:

  • 如果我没有在我的请求中发送“Expect: 100-continue”标头并且仍然收到“HTTP/1.1 100 Continue”作为响应,这是否意味着网络中存在错误-服务?
  • @timberspine CURL 似乎根据链接的 PHP 问题自行完成了这一切。有一种方法可以通过设置一个空的 Expect: 标头来禁用它。
  • 刚刚对此进行了测试,空的 Expect 标头解决方案效果很好。再次感谢 Joachim 和 jterrace!
猜你喜欢
  • 2014-10-12
  • 2020-07-04
  • 2015-02-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多