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
-设置origin
为true
反映请求的来源(由定义)req.header('Origin')
,或设置false
为禁用 CORS。String
-设置origin
为特定来源。例如,如果将其设置为"http://example.com"
仅允许来自“ http://example.com”的请求。RegExp
-设置origin
为正则表达式模式,该模式将用于测试请求的来源。如果匹配,则将反映请求的来源。例如,该模式/example\.com$/
将反映来自以“ example.com”结尾的来源的任何请求。Array
-设置origin
为有效原点的数组。每个原点可以是String
或RegExp
。例如,["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
。