使用CDK配置API网关响应头Access-Control-Allow-Origin为*的方法
问题说明
使用CDK创建API Gateway端点时,需要在网关响应头中设置Access-Control-Allow-Origin: *以允许所有跨域源,编写如下配置代码执行部署时触发错误:
api.addGatewayResponse('4xx-error-response', { type: ResponseType.DEFAULT_4XX , statusCode: '400', responseHeaders: { 'Access-Control-Allow-Origin': `*` }, templates: { 'application/json': '{ "message": "Access denied", "statusCode": "403", "type": "$context.error.responseType" }' } });
部署报错信息如下:
Resource handler returned message: "Invalid mapping expression specified: Validation Result: warnings : [], errors : [Invalid mapping expression specified: *]
目标是实现如下参考截图所示的网关响应配置:
报错根因
API Gateway的网关响应头字段默认会将传入值解析为映射表达式,直接传入*时,服务端会将其判定为非法的映射语法,触发校验失败。所有静态字符串类型的响应头值,必须用单引号包裹,才会被识别为固定静态值。
修复方案
将Access-Control-Allow-Origin对应的取值修改为'*'(即字符串内容为被单引号包裹的*,CDK中写法为"'*'")即可通过校验,完整正确代码如下:
api.addGatewayResponse('4xx-error-response', { type: ResponseType.DEFAULT_4XX , statusCode: '400', responseHeaders: { 'Access-Control-Allow-Origin': `'*'` }, templates: { 'application/json': '{ "message": "Access denied", "statusCode": "403", "type": "$context.error.responseType" }' } });
配置其他静态类型的CORS响应头(比如Access-Control-Allow-Headers、Access-Control-Allow-Methods)时也遵循相同规则,只需将固定值放在单引号内传入即可,例如允许的请求方法为GET/POST/OPTIONS时,对应取值写为"'GET,POST,OPTIONS'"。
内容的提问来源于stack exchange,提问作者DrkStr
相关产品推荐
相关产品推荐

