【问题标题】:Google App Engine serve Content-Length headerGoogle App Engine 提供 Content-Length 标头
【发布时间】:2016-12-29 11:24:43
【问题描述】:

我正在使用以下内容通过 PHP App Engine 从 GS 提供文件:

google\appengine\api\cloud_storage\CloudStorageTools::serve

这不会设置 Content-Length 标头,并且 App Engine 不允许该标头由脚本手动设置。 (https://cloud.google.com/appengine/docs/python/how-requests-are-handled#headers_removed)

如何设置 Content-Length 标头,以便用户在开始下载文件时了解文件的大小?

【问题讨论】:

    标签: php google-app-engine google-cloud-storage


    【解决方案1】:

    我有使用 App Engine 的经验,但使用过 Python,但我希望这很有用。

    如果您手动设置 Content-Length 标头,App Engine 将删除它,但它会在响应发送到客户端之前自动设置它。

    这可确保该值没有错误,它将是 App Engine 发送的绝对最终响应的长度。

    我已经使用一个新的简单应用程序对此进行了测试,方法是手动设置错误的大小,将其留空并设置正确的大小。在所有三个测试中,App Engine 都将正确的Content-Length 返回给客户端。

    您是否从客户端进行了测试以查看标头是否存在且正确?

    我希望这有助于澄清,虽然 App Engine 会在您设置标头时将其删除,但它会自动将其设置为正确的值。

    【讨论】:

    • 感谢回复。我正在使用 PHP App Engine,每个请求的内容长度标头都是正确的,除非使用 google\appengine\api\cloud_storage\CloudStorageTools::serve。它被省略了。这是PHP版本的bug吗?
    • 我继续阅读了 serve 方法的具体文档。签名读取 serve(string $gs_filename, array $options = array())。我可以看到,您可以在选项中提供 start、end 和 use_range 来更改文件的服务范围。您是否发送任何选项?
    • 不,我只是发送文件名
    • 我发现 HEAD 请求确实返回了正确的 Content-Length 标头,但在 GET 中省略了。
    • 对于这样一个特定的行为,我会提交一个错误报告。您的所有文件或仅部分文件都会出现这种情况?
    【解决方案2】:

    如果您使用 google gsutil 提供的脚本并运行“du”命令,您应该能够获取该数据。此外,您还有一些有趣的 API 功能示例 here 以及如何安装 gsutil here

    问候

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-05
      • 1970-01-01
      • 1970-01-01
      • 2016-08-25
      相关资源
      最近更新 更多