加入我们,于10月8日至10日在纽约市学习最新的GraphQL联邦化和API平台工程技巧、趋势和新闻。加入2024年在纽约市举办的GraphQL峰会
文档
免费开始

配置CORS

控制浏览器对您的路由器访问


注意

本文描述了特定于GraphOS路由器和Apollo路由器核心的CORS配置。有关CORS的更通用介绍和常见注意事项,请参阅以下部分:

  • 为什么使用CORS?
  • 为您的项目选择CORS选项

默认情况下,只能使GraphOS Studio来启动对它的连接。如果您的为其他基于浏览器的应用程序提供数据,您需要在其路由器'scors's部分进行以下操作之一:cors部分

  • 将那些Web应用程序的来源添加到路由器允许的origins's列表中。

    • 如果有已知的有限Web应用程序列表使用您的supergraph,请使用此选项。
  • 将匹配那些Web应用程序来源的正则表达式添加到路由器允许的origins's列表中。

    • 如果您想按模式匹配来源,此选项很有用,以下是一个示例,用于匹配特定命名空间的子域名。
  • 启用allow_any_origin选项。

    • 如果您的supergraph是一个具有任意多数量的Web应用程序消费者的公开API,请使用此选项。
    • 启用此选项后,router会发送通配符(*值作为Access-Control-Allow-Origin头。这允许任何网站启动对其的浏览器连接(但他们无法提供cookies或其他凭证)。
  • 如果客户端需要使用cookies验证其请求,您必须使用以下选项之一:origins,match_origins,或两种选项的组合。当使用两种选项时,请注意,origins会先于match_origins进行评估。

以下片段包含了每个选项的例子(使用allow_any_origin,或origins和/or match_origins):

router.yaml
cors:
# Set to true to allow any origin
# (Defaults to false)
allow_any_origin: true
# List of accepted origins
# (Ignored if allow_any_origin is true)
# (Defaults to the GraphOS Studio url: `https://studio.apollographql.com`)
#
# An origin is a combination of scheme, hostname and port.
# It does not have any path section, so no trailing slash.
origins:
- https://www.your-app.example.com
- https://studio.apollographql.com # Keep this so GraphOS Studio can run queries against your router
match_origins:
- "^https://([a-z0-9]+[.])*api[.]example[.]com$" # any host that uses https and ends with .api.example.com

您也可以通过将origins设置为空列表完全禁用CORS:

router.yaml
cors:
origins: []

如果您的router仅服务于浏览器式客户端,您可能不需要修改默认的CORS配置。

传递凭据

如果您的router需要将请求发送到包含用户凭据(例如,通过cookie),您需要修改您的CORS配置以告知浏览器这些凭据是被允许的。

您可以通过将Access-Control-Allow-Credentials HTTP头部设置为true启用凭据。

要允许浏览器将凭据传递到router,请将allow_credentials设置为true,如下所示:

router.yaml
cors:
origins:
- https://www.your-app.example.com
- https://studio.apollographql.com
allow_credentials: true

💡 提示

为了支持认证请求,您的router配置文件必须指定具体的origins。如果您的router启用了allow_any_origin,您的浏览器将拒绝发送凭据。

此外,您还需要配置router以将Cookie头部传递到您的某些(或所有)子图中:

router.yaml
headers:
all:
request:
- propagate:
named: cookie

有关从发送cookie和授权头部的示例,请参阅认证

cors所有选项

以下片段展示了router的所有CORS配置默认设置:

router.yaml
#
# CORS (Cross Origin Resource Sharing)
#
cors:
# Set to true to allow any origin
allow_any_origin: false
# List of accepted origins
# (Ignored if allow_any_origin is set to true)
#
# An origin is a combination of scheme, hostname and port.
# It does not have any path section, so no trailing slash.
origins:
- https://studio.apollographql.com # Keep this so GraphOS Studio can still run queries against your router
# Set to true to add the `Access-Control-Allow-Credentials` header
allow_credentials: false
# The headers to allow.
# Not setting this mirrors a client's received `access-control-request-headers`
# This is equivalent to allowing any headers,
# except it will also work if allow_credentials is set to true
allow_headers: []
# Allowed request methods
methods:
- GET
- POST
- OPTIONS
# Which response headers are available to scripts running in the
# browser in response to a cross-origin request.
expose_headers: []
# Adds the Access-Control-Max-Age header
# Can be set to a duration in time units
# If not set, the header is not included
max_age: 2h

响应 Vary 标头

插件可以设置一个响应Vary标头。如果所有插件都处理完毕后,没有响应Vary标头,则router将添加一个值为"origin"的标头。

上一页
流量整形
下一页
CSRF防护
评分文章评分在GitHub上编辑Edit论坛Discord

©2024Apollo Graph Inc.,作为Apollo GraphQL运营。

隐私政策

公司