node.js - 预检响应中的 Access-Control-Allow-Headers 不允许节点 Js 请求标头字段 Access-Control-Allow-Origin
问题描述
在节点 API 中添加自定义标头(命名为“RBR”)并在 Flex 环境中作为 Google 端点托管后,出现 CORS 错误。这个节点 API 从 Angular 代码调用。我们将 Angular 和 Node 代码都托管为 Google Flex 环境。API 有 3 个参数,2 个 header 值和 1 个 body 值。1.授权(即 OAuth JWT 令牌) 2. RBR(我们有用于授权的自定义存储库) 3. 正文值 - Json 类型。
在 openapi.yaml 文件中,我们为 CORS 问题添加了以下行。
x-google-endpoints:
- name: "backend-dot-myproject.appspot.com"
allowCors: "true"
在节点 js 中,我们为 CORS 问题添加了以下代码。
app.use((req, res, next) => {
res.header("Access-Control-Allow-Origin", "*");
res.header("Access-Control-Allow-Headers",
"Access-Control-Allow-Headers,Origin,Accept,X-Requested-With,Content-Type,Access-Control-Request-Method,Access-Control-Request-Headers,authorization,rbr");
if (req.headers.origin) {
res.header('Access-Control-Allow-Origin', req.headers.origin);
}
if (req.method === 'OPTIONS') {
res.header("Access-Control-Allow-Methods", "GET, POST, PUT, PATCH, DELETE");
return res.status(200).json({});
}
res.setHeader('Access-Control-Allow-Credentials', true);
next();
});
解决方案
以下是在 NodeJs+Google Flex 环境中解决这个 CORS 问题的步骤,
更新中间件代码
app.use((req, res, next) => { res.header("Access-Control-Allow-Origin", "*"); res.header("Access-Control-Allow-Headers", "Origin, X-Requeted-With, Content-Type, Accept, Authorization, RBR"); if (req.headers.origin) { res.header('Access-Control-Allow-Origin', req.headers.origin); } if (req.method === 'OPTIONS') { res.header("Access-Control-Allow-Methods", "GET, POST, PUT, PATCH, DELETE"); return res.status(200).json({}); } next(); });
在 app.yaml
handlers:
- url: /
static_dir: /
http_headers:
Access-Control-Allow-Origin: '*'
推荐阅读
- c# - 使用 ssis 编码后将 .dat 文件写入 .txt 文件
- sql-server-2012 - 查找缺失的设置
- c# - 来自 Nuget 数据包的核心 2 应用程序根为空
- pandas - 如何绘制一个国家是一个垃圾箱的直方图
- web-services - 授权标头中不是有效的键=值对(缺少等号)
- procedure - 如何修复:Ada 95 中的“类型转换参数必须是单个表达式”
- flutter - 使用 Flutter 应用程序更改最近应用程序屏幕中使用的背景颜色
- tensorflow - 如何在 tf.keras 中调试自定义指标值
- java - for 循环完成后,为什么小程序屏幕上什么也没有显示?
- vb.net - 如何将基于服务的 SQL 表从 Windows 窗体应用程序导出到 Excel?