CORS

未匹配的标注

框架内置对 跨源资源共享 的支持,所以无需安装任何依赖包。

config/cors.ts 文件中将 enabled 属性设为 true,以开启 CORS 配置。

注:如果没有此配置文件, 则需要手动创建。可以从 CORS stub 获取配置信息。

// title: config/cors.ts
{
  "enabled": true
}

配置允许访问的源

你可以配置 origins 属性来允许 CORS 请求。这个属性控制了 Access-Control-Allow-Origin 头。

布尔值

设置origin为 true 会允许任意源的请求。设置为 false 则拒绝所有源的请求。

{
  origin: true
}

字符串或包含源的数组

你可以用字符串配置一个允许请求的源,或者用字符串数组配置多个允许请求的源。

{
  origin: 'adonisjs.com',
}

// 或
{
  origin: ['adonisjs.com']
}

通配符

相当于给 Access-Control-Allow-Origin 设置了一个通配符。

{
  origin: '*'
}

函数

你也可以使用一个函数作为 origin 的值,在运行时去判断哪些源被允许、哪些源被拒绝。

此函数接收“当前源”作为唯一的参数,必须返回一个布尔值,一个通配符或者一个包含允许访问源的字符串/字符串数组

const ALLOWED_ORIGINS = []

{
  origin: (requestOrigin: string) => {
    return ALLOWED_ORIGINS.includes(requestOrigin)
  }
}

允许的请求方式

methods 属性控制在预检请求阶段允许使用的 HTTP 请求方式。header 中的 Access-Control-Request-Method 属性会验证 HTTP 请求方式是否被允许。

{
  methods: ['GET', 'HEAD', 'POST', 'PUT', 'DELETE']
}

允许的头

headers 属性控制在预检请求时的头。 Access-Control-Request-Headers 属性会检查请求头。

布尔值

设置为 true 会通过所有的请求头。反之,设置为 false 会拒绝所有的请求头。

{
  headers: true
}

字符串或者用数组表示的 headers

你可以使用字符串去配置一个允许的 headers 属性,也可以使用数组配置多个允许的 headers 属性。

{
  headers: [
    'Content-Type',
    'Accept',
    'Cookie'
  ]
}

函数

你可以定义一个函数作为 headers 属性的值以在运行时配置 headers 。

此函数接收当前的 header 值作为唯一的参数,必须返回一个布尔值或者字符串或允许来源的数组

const ALLOWED_HEADERS = []

{
  headers: (requestHeaders: string) => {
    return ALLOWED_ORIGINS.includes(requestHeaders)
  }
}

暴露头信息

exposeHeaders 属性通过 Access-Control-Expose-Headers 控制在预检请求阶段需要暴露的头信息。

{
  exposeHeaders: [
    'cache-control',
    'content-language',
    'content-type',
    'expires',
    'last-modified',
    'pragma',
  ]
}

允许凭据

credentials 属性控制在预检阶段的 Access-Control-Allow-Credentials 头。

{
  credentials: true
}

Max age

maxAge 属性控制响应头的 Access-Control-Max-Age 属性。 值的单位是秒.

  • 值为 null 将不会设置到 header 中。
  • 此外,值为 -1 时会设置到 header 中,但缓存会关闭。
{
  maxAge: 90
}

本文章首发在 LearnKu.com 网站上。

本译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。

原文地址:https://learnku.com/docs/adonisjs/5.x/se...

译文地址:https://learnku.com/docs/adonisjs/5.x/se...

上一篇 下一篇
贡献者:2
讨论数量: 0
发起讨论 只看当前版本


暂无话题~