400:错误请求
问题:执行可续传上传时,我收到了此错误和消息 Failed to parse Content-Range header.
解决方案:您在 Content-Range
标头中使用的值无效。例如,Content-Range: */*
无效,应改成指定为 Content-Range: bytes */*
。如果您收到此错误,则表示您当前的可续传上传已失效,因此必须启动新的可续传上传。
401:未经授权
问题:直接或通过 Cloud CDN 对公共存储分区发出的请求会失败,并返回 HTTP 401: Unauthorized
和 Authentication Required
响应。
解决方案:检查您的客户端或任何中间代理是否没有将 Authorization
标头添加到对 Cloud Storage 发出的请求中。任何包含 Authorization
标头(即使该标头为空)的请求都将作为一项身份验证尝试进行验证。
403:帐号已停用
问题:我尝试创建存储分区,但收到 403 Account Disabled
错误。
解决方案:此错误表示您没有为关联项目启用结算功能。如需了解启用结算功能的步骤,请参阅为项目启用结算功能。
如果已启用结算功能,但是您仍然收到此错误消息,您可以与支持部门联系并提供您的项目 ID 和问题描述。
403:访问遭拒
问题:我尝试列出存储分区中的对象,但收到 403 Access Denied
错误和/或类似于 Anonymous caller does not have storage.objects.list access
的消息。
解决方案:检查您的凭据是否正确。例如,如果您使用的是 gsutil,请检查存储在 .boto
文件中的凭据是否正确。 此外,请通过使用 gsutil version -l
命令并检查 config path(s)
条目来确认 gsutil 使用的是预期的 .boto
文件。
假设您使用的是正确的凭据,您的请求是通过代理使用 HTTP(而不是 HTTPS)进行路由的吗?如果是,请检查您的代理是否已配置为从此类请求中移除 Authorization
标头。如果进行了此类配置,请确保您的请求使用 HTTPS(而不是 HTTP)。
409:冲突
问题:我尝试创建存储分区,但收到以下错误:
409 Conflict. Sorry, that name is not available. Please try a different one.
解决方案:您尝试使用的存储分区名称(例如 gs://cats
或 gs://dogs
)已被占用。Cloud Storage 使用全局命名空间,因此您不能将存储分区命名为与现有存储分区相同的名称。请选择未使用的名称。
代理服务器
问题:我要通过代理服务器进行连接,我需要做什么?
解决方案:如需通过代理服务器访问 Cloud Storage,您必须有权访问以下网域:
accounts.google.com
,用于通过gsutil config
创建 OAuth2 身份验证令牌oauth2.googleapis.com
,用于执行 OAuth2 令牌交换*.googleapis.com
,用于执行存储请求
如果您的代理服务器或安全政策不支持按网域列出白名单(而是需要按 IP 网络块列出白名单),我们强烈建议您为所有 Google IP 地址范围配置代理服务器。您可以通过在 ARIN 上查询 WHOIS 数据来查找地址范围。最佳做法是定期查看代理设置,以确保它与 Google 的 IP 地址相匹配。
我们不建议您使用单次查询 oauth2.googleapis.com
和 storage.googleapis.com
所获得的单个 IP 地址来配置代理。由于 Google 服务通过 DNS 名称进行呈现,而这些名称映射到了可能随时间变化的大量 IP 地址,因此,如果基于单次查询来配置代理,可能会导致您无法连接到 Cloud Storage。
如果您的请求通过代理服务器进行路由,您可能需要与网络管理员联系,以确保代理不会删除包含您的凭据的 Authorization
标头。如果没有 Authorization
标头,您的请求将被拒绝,并且您会收到 MissingSecurityHeader
错误。
gsutil stat
问题:我尝试使用 gsutil stat
命令来显示子目录的对象状态,但收到错误。
解决方案:Cloud Storage 使用平面命名空间将对象存储到存储分区中。
虽然您可以在对象名称中使用斜杠(“/”),使其看起来仿佛处于层次结构中,但 gsutil stat
命令会将尾部斜杠视为对象名称的一部分。
例如,如果运行命令 gsutil -q stat gs://my-bucket/my-object/
,gsutil 将查询对象 my-object/
(带有尾部斜杠)的相关信息,而不是对嵌套在 my-bucket/my-object/
下的对象执行操作。除非您实际拥有具有该名称的对象,否则操作将失败。
对于子目录列出操作,请改为使用 gsutil ls
。
gcloud auth
问题:我尝试使用 gcloud auth
命令对 gsutil 进行身份验证,但仍无法访问我的存储分区或对象。
解决方案:您的系统可能同时安装了独立版和 Cloud SDK 版 gsutil。请运行 gsutil version -l
命令并检查 using cloud sdk
的值。如果为 False
,则说明在您运行命令时,系统使用的是独立版 gsutil。您可以从系统中移除此版本的 gsutil,也可以使用 gsutil config
命令进行身份验证。
配置为网站的存储分区
设置存储分区来托管静态网站时可能遇到的常见问题如下。
HTTPS 传送
问题:我想在不使用负载平衡器的情况下通过 HTTPS 传送我的内容。
解决方案:您可以使用 https://storage.googleapis.com/my-bucket/my-object
等直接 URI 通过 HTTPS 传送静态内容。对于通过 SSL 使用自定义网域传送内容的其他选项,您可以:
- 结合使用第三方内容分发网络和 Cloud Storage。
- 从 Firebase 托管而非 Cloud Storage 传送静态网站内容。
域名验证
问题:我无法验证我的域名。
解决方案:通常,Search Console 中的验证过程会指示您将文件上传到您的网域,但是,如果没有相关的存储分区(您只能在执行域名验证后创建),您可能无法执行此操作。
在这种情况下,请使用域名提供程序验证方法来验证所有权。有关相关操作步骤,请参阅所有权验证。您可以在创建存储分区之前完成此验证。
页面无法访问
问题:我的网站提供的网页向我发出 Access denied
错误消息。
解决方案:检查对象是否已被公开共享。如果没有,请参阅公开数据以了解如何执行此操作。
如果您之前上传并共享了一个对象,但随后上传了该对象的新版本,则您必须以公开方式重新共享该对象。这是因为,上传新的版本后,公开权限会被替换。
内容下载
问题:系统提示我下载我的页面内容,而不能在浏览器中查看。
解决方案:如果您将 MainPageSuffix
指定为对象并且该对象的类型不是网络内容,系统会提示网站访问者下载内容,而不是提供页面。如需解决此问题,请将 content-type 元数据条目更新为合适的值,例如 text/html
。如需了解如何执行此操作,请参阅修改对象元数据。
使用 storage.cloud.google.com
下载内容
问题:我正在从 storage.cloud.google.com
下载我的公开内容,我在浏览器中导航到公开对象时收到 403 - Forbidden
错误
https://storage.cloud.google.com/BUCKET_NAME/OBJECT_NAME。
解决方案:使用 storage.cloud.google.com
下载对象的过程称为经过身份验证的浏览器下载;该过程始终使用基于 Cookie 的身份验证,即使对象设为可供 allUsers
公开访问也是如此。如果您已配置 Cloud Audit Logs 中的数据访问日志以跟踪对象的访问权限,则该功能的一个限制就是经过身份验证的浏览器下载不能用于访问受影响的对象;如果尝试这样做,就会产生 403
响应。
为避免此问题,请执行以下任一操作:
- 使用直接 API 调用(支持未经身份验证的下载),而不是使用经过身份验证的浏览器下载。
- 停用用于跟踪受影响对象访问权限的 Cloud Storage 数据访问日志。请注意,数据访问日志在项目级别或更高级别设置,并且可以在多个级别同时启用。
- 设置数据访问日志豁免,从数据访问日志跟踪中排除特定用户,使这些用户能够执行经过身份验证的浏览器下载。
301:永久移动
问题:访问目录路径时,系统会返回一个空对象和一个 301
HTTP 响应代码。
解决方案:如果在访问目录(例如 http://www.example.com/dir/
)时,您的浏览器下载了一个零字节对象,并且收到 301
响应代码,则您的存储分区很可能包含具有该名称的空对象。要检查是否存在此问题并解决问题,请执行以下操作:
- 在 Google Cloud Console 中打开 Cloud Storage 浏览器。
打开 Cloud Storage 浏览器 - 点击 Google Cloud Console 顶部的激活 Cloud Shell 按钮。
- 运行
gsutil ls -R gs://www.example.com/dir/
。如果输出内容包含http://www.example.com/dir/
,则表明该位置存在一个空对象。 - 使用以下命令移除空对象:
gsutil rm gs://www.example.com/dir/
您现在可以访问 http://www.example.com/dir/
并让它返回该目录的 index.html
文件(而不是空对象)。
了解 Cloud Storage 浏览器中的错误
问题:使用 Cloud Storage 浏览器执行操作时,我收到一条一般性错误消息。例如,我在尝试删除存储分区时看到错误消息,但看不到操作失败的原因。
解决方案:使用 Google Cloud Console 的通知查看有关失败操作的详细信息:
点击 Google Cloud Console 顶部的通知按钮。
下拉列表会显示 Google Cloud Console 最近执行的操作。
点击您要详细了解的操作项。
此时将打开一个页面,其中显示了有关该操作的详细信息。
点击各行即可展开详细的错误信息。
以下是一个失败存储分区删除操作的错误信息示例,该示例说明了存储分区保留政策阻止删除存储分区。