Backend

CORS跨域设置

CORS 是一个 W3C 标准,全称是"跨域资源共享"(Cross-origin resource sharing)。

Malagu 框架提供的跨域设置能力是通过集成开源库cors实现的。将开源库cors的配置能力通过 Malagu 组件属性暴露出来,我们只需要使用组件属性配置跨域访问规则即可。框架默认运行所有源站跨域访问,在正式环境务必设置跨域规则,避免出现安全问题。

malagu.yml
malagu:
  web:
    cors:
      origin: https://www.cellbang.com # 允许 https://www.cellbang.com 跨域访问
malagu.yml
malagu:
  web:
    cors:
      origin: ${{'cellbang\.com$'|regexp}} # 允许以 cellbang.com 为后缀的源站跨域访问
malagu.yml
malagu:
  web:
    cors:
      origin:
        - https://www.abc.com
        - ${{'cellbang\.com$'|regexp}} # 允许 https://www.abc.com 和以 cellbang.com 为后缀的源站跨域访问

配置参数

  • origin:配置Access-Control-Allow-OriginCORS 标头。可能的值:
    • Boolean-设置origintrue反映请求的来源(由定义)req.header('Origin'),或设置false为禁用 CORS。
    • String-设置origin为特定来源。例如,如果将其设置为"http://example.com"仅允许来自“ http://example.com”的请求。
    • RegExp-设置origin为正则表达式模式,该模式将用于测试请求的来源。如果匹配,则将反映请求的来源。例如,该模式/example\.com$/将反映来自以“ example.com”结尾的来源的任何请求。
    • Array-设置origin为有效原点的数组。每个原点可以是StringRegExp。例如,["http://example1.com", /\.example2\.com$/]将接受来自“ http://example1.com”或来自“ example2.com”子域的任何请求。
    • Function-设置origin为实现某些自定义逻辑的函数。该函数将请求源作为第一个参数,并将回调(需要签名err [object], allow [bool])作为第二个参数。
  • methods:配置Access-Control-Allow-Methods CORS 标头。需要以逗号分隔的字符串(例如:“ GET,PUT,POST”)或数组(例如:)['GET', 'PUT', 'POST']
  • allowedHeaders:配置Access-Control-Allow-Headers CORS 标头。需要以逗号分隔的字符串(例如:“ Content-Type,Authorization”)或数组(例如:)['Content-Type', 'Authorization']。如果未指定,则默认为反映请求的Access-Control-Request-Headers标头中指定的标头。
  • exposedHeaders:配置Access-Control-Expose-Headers CORS 标头。需要以逗号分隔的字符串(例如:“ Content-Range,X-Content-Range”)或数组(例如:)['Content-Range', 'X-Content-Range']。如果未指定,则不会公开任何自定义标头。
  • credentials:配置Access-Control-Allow-Credentials CORS 标头。设置为true传递标题,否则将省略。
  • maxAge:配置Access-Control-Max-Age CORS 标头。设置为整数以传递标头,否则将省略。
  • preflightContinue:将 CORS 飞行前响应传递给下一个处理程序。
  • optionsSuccessStatus:提供状态代码以用于成功OPTIONS请求,因为某些旧版浏览器(IE11,各种 SmartTV)会阻塞204

Copyright © 2024 Zero (github@groupguanfang) 粤ICP备2023102563号