跨域资源共享 (CORS) 可让不同网域中的资源之间实现交互,但通常情况下,为了防止恶意行为,并不允许这种交互。在本主题中,您将了解如何为 Cloud Storage 存储桶设置 CORS 配置,以及如何查看存储桶上设置的 CORS 配置。如需查看 CORS 配置(包括停用存储桶上任何现有配置的配置)示例,请参阅 CORS 配置示例。
为存储桶设置 CORS 配置
如需在存储桶上设置 CORS 配置,需指定 HTTP 方法和源网域等信息,以便确定该存储桶可以接受的请求类型。
按照以下步骤在存储桶上设置 CORS 配置:
控制台
您无法使用 Google Cloud 控制台管理 CORS。请改用 gcloud CLI。
命令行
使用带有
--cors-file
标志的gcloud storage buckets update
命令:gcloud storage buckets update gs://BUCKET_NAME --cors-file=CORS_CONFIG_FILE
其中:
BUCKET_NAME
是相关存储桶的名称,例如my-bucket
。CORS_CONFIG_FILE
是您在第 1 步中创建的 JSON 文件的路径。
客户端库
C++
如需了解详情,请参阅 Cloud Storage C++ API 参考文档。
如需向 Cloud Storage 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
以下示例在存储桶上设置 CORS 配置:
C#
如需了解详情,请参阅 Cloud Storage C# API 参考文档。
如需向 Cloud Storage 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
以下示例在存储桶上设置 CORS 配置:
Go
如需了解详情,请参阅 Cloud Storage Go API 参考文档。
如需向 Cloud Storage 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
以下示例在存储桶上设置 CORS 配置:
Java
如需了解详情,请参阅 Cloud Storage Java API 参考文档。
如需向 Cloud Storage 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
以下示例在存储桶上设置 CORS 配置:
Node.js
如需了解详情,请参阅 Cloud Storage Node.js API 参考文档。
如需向 Cloud Storage 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
以下示例在存储桶上设置 CORS 配置:
PHP
如需了解详情,请参阅 Cloud Storage PHP API 参考文档。
如需向 Cloud Storage 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
以下示例在存储桶上设置 CORS 配置:
Python
如需了解详情,请参阅 Cloud Storage Python API 参考文档。
如需向 Cloud Storage 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
以下示例在存储桶上设置 CORS 配置:
Ruby
如需了解详情,请参阅 Cloud Storage Ruby API 参考文档。
如需向 Cloud Storage 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
以下示例在存储桶上设置 CORS 配置:
REST API
JSON API
- 从 OAuth 2.0 Playground 获取授权访问令牌。将 Playground 配置为使用您自己的 OAuth 凭据。如需了解相关说明,请参阅 API 身份验证。
使用
cURL
,通过PATCH
Bucket 请求调用 JSON API:curl --request PATCH \ 'https://storage.googleapis.com/storage/v1/b/BUCKET_NAME?fields=cors' \ --header 'Authorization: Bearer OAUTH2_TOKEN' \ --header 'Content-Type: application/json' \ --data-binary @CORS_CONFIG_FILE
其中:
BUCKET_NAME
是存储桶的名称。例如my-bucket
。OAUTH2_TOKEN
是您在第 1 步中生成的访问令牌。CORS_CONFIG_FILE
是您在第 2 步中创建的 JSON 文件的路径。
XML API
- 从 OAuth 2.0 Playground 获取授权访问令牌。将 Playground 配置为使用您自己的 OAuth 凭据。如需了解相关说明,请参阅 API 身份验证。
使用
cURL
通过范围限定为?cors
的PUT Bucket
请求调用 XML API:curl -X PUT --data-binary @CORS_CONFIG_FILE \ -H "Authorization: Bearer OAUTH2_TOKEN" \ -H "x-goog-project-id: PROJECT_ID" \ "https://storage.googleapis.com/BUCKET_NAME?cors"
其中:
BUCKET_NAME
是存储桶的名称。例如my-bucket
。OAUTH2_TOKEN
是您在第 1 步中生成的访问令牌。PROJECT_ID
是与存储桶关联的项目的 ID。例如my-project
。CORS_CONFIG_FILE
是您在第 2 步中创建的 XML 文件的路径。
查看存储桶的 CORS 配置
如需查看存储桶的 CORS 配置,请执行以下操作:
控制台
您无法使用 Google Cloud 控制台管理 CORS。请改用 gcloud CLI。
命令行
使用带有 --format
标志的 gcloud storage buckets describe
命令:
gcloud storage buckets describe gs://BUCKET_NAME --format="default(cors_config)"
其中 BUCKET_NAME
是您要查看其 CORS 配置的存储桶的名称,例如 my-bucket
。
客户端库
如需使用客户端库查看存储桶的 CORS 配置,请按照有关如何显示存储桶的元数据的说明操作,并在响应中查找 CORS 字段。
C++
如需了解详情,请参阅 Cloud Storage C++ API 参考文档。
如需向 Cloud Storage 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
C#
如需了解详情,请参阅 Cloud Storage C# API 参考文档。
如需向 Cloud Storage 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
Go
如需了解详情,请参阅 Cloud Storage Go API 参考文档。
如需向 Cloud Storage 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
Java
如需了解详情,请参阅 Cloud Storage Java API 参考文档。
如需向 Cloud Storage 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
Node.js
如需了解详情,请参阅 Cloud Storage Node.js API 参考文档。
如需向 Cloud Storage 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
PHP
如需了解详情,请参阅 Cloud Storage PHP API 参考文档。
如需向 Cloud Storage 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
Python
如需了解详情,请参阅 Cloud Storage Python API 参考文档。
如需向 Cloud Storage 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
Ruby
如需了解详情,请参阅 Cloud Storage Ruby API 参考文档。
如需向 Cloud Storage 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
REST API
JSON API
- 从 OAuth 2.0 Playground 获取授权访问令牌。将 Playground 配置为使用您自己的 OAuth 凭据。如需了解相关说明,请参阅 API 身份验证。
使用
cURL
,通过GET
Bucket 请求调用 JSON API:curl -X GET \ -H "Authorization: Bearer OAUTH2_TOKEN" \ "https://storage.googleapis.com/storage/v1/b/BUCKET_NAME?fields=cors"
其中:
OAUTH2_TOKEN
是您在第 1 步中生成的访问令牌的名称。BUCKET_NAME
是相关存储桶的名称,例如my-bucket
。
XML API
- 从 OAuth 2.0 Playground 获取授权访问令牌。将 Playground 配置为使用您自己的 OAuth 凭据。如需了解相关说明,请参阅 API 身份验证。
使用
cURL
通过范围限定为?cors
的GET
Bucket 请求调用 XML API:curl -X GET \ -H "Authorization: Bearer OAUTH2_TOKEN" \ "https://storage.googleapis.com/BUCKET_NAME?cors"
其中:
OAUTH2_TOKEN
是您在第 1 步中生成的访问令牌的名称。BUCKET_NAME
是相关存储桶的名称,例如my-bucket
。
排查 CORS 请求问题
如果您在从其他网域访问 Cloud Storage 存储桶时遇到意外行为,请尝试按照以下步骤操作:
查看目标存储桶上的 CORS 配置。如果存在多个 CORS 配置条目,请确保用于问题排查的请求值会映射到单个 CORS 配置条目中的值。
确认您没有向
storage.cloud.google.com
端点发出请求,该端点不允许 CORS 请求。如需详细了解 CORS 支持的端点,请参阅 Cloud Storage CORS 支持。使用您自己选择的工具查看请求和响应。在 Chrome 浏览器中,您可以使用标准开发者工具来查看此信息:
- 点击浏览器工具栏上的 Chrome 菜单 (more_vert)。
- 选择更多工具 > 开发者工具。
- 点击网络标签页。
- 通过您的应用或命令行发送请求。
- 在显示网络活动的窗格中,找到相应请求。
- 在名称列中,点击与相应请求对应的名称。
- 点击标头标签以查看响应标头,或点击响应标签以查看响应内容。
如果您没有看到请求和响应,可能是由于您的浏览器缓存了先前尝试失败的预检请求。清除浏览器的缓存应该也会清除预检缓存。如果预检缓存未被清除,请将您的 CORS 配置中的
MaxAgeSec
值设置为较低值(如果未指定,默认值为 1800(即 30 分钟)),按照旧MaxAgeSec
值所指定的时长耐心等待,然后重新尝试该请求。此时将执行新的预检请求,以提取新的 CORS 配置并完全清除缓存条目。调试完您的问题后,请将MaxAgeSec
重新提升至较高值,以减少发往您的存储桶的预检流量。确保请求包含
Origin
标头,且该标头的值至少与存储桶 CORS 配置中的一个Origins
值相匹配。请注意,这些值的架构、主机和端口必须完全匹配。下面提供了一些可以接受的匹配项示例:http://origin.example.com
匹配http://origin.example.com:80
(因为 80 是默认的 HTTP 端口),但不匹配https://origin.example.com
、http://origin.example.com:8080
、http://origin.example.com:5151
或http://sub.origin.example.com
。https://example.com:443
匹配https://example.com
,但不匹配http://example.com
或http://example.com:443
。http://localhost:8080
仅与http://localhost:8080
完全匹配,但不匹配http://localhost:5555
或http://localhost.example.com:8080
。
确保请求的 HTTP 方法(对于简单请求)或在
Access-Control-Request-Method
中指定的方法(对于预检请求)与存储桶 CORS 配置中的至少一个Methods
值匹配。对于预检请求,请查看它是否包含一个或多个
Access-Control-Request-Header
标头。如果是这样,请确保每个Access-Control-Request-Header
值与存储桶 CORS 配置中的一个ResponseHeader
值匹配。Access-Control-Request-Header
中指定的所有标头必须包含在 CORS 配置中,才能使预检请求成功并使 CORS 标头包含在响应中。