通过OpenVPN端口转发访问AWS EC2上Node.js服务时遇请求头字符错误
Node.js服务通过OpenVPN端口转发访问时出现Header字符无效错误
我在AWS EC2实例上部署了Node.js服务,使用公网IP从本地访问一切正常,但通过OpenVPN(UDP)端口转发到localhost访问该实例时,抛出以下错误:
{"message":"请求头内容[\"Access-Control-Allow-Origin\"]包含无效字符","error":{"code":"ERR_INVALID_CHAR"}}
我已检查响应头,具体内容如下:
Access-Control-Allow-Headers: Origin, X-Requested-With, Content-Type, Accept Access-Control-Allow-Origin: * Connection: keep-alive Content-Length: 119 Content-Type: application/json; charset=utf-8 Date: Wed, 13 Dec 2023 11:36:18 GMT ETag: W/"77-cTRgoYzDiwRyCA8tFrP3F9sMLIg" Server: nginx/1.22.1 Strict-Transport-Security: max-age=15552000; includeSubDomains X-Content-Type-Options: nosniff X-DNS-Prefetch-Control: off X-Download-Options: noopen X-Frame-Options: SAMEORIGIN X-XSS-Protection: 1; mode=block Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8 Accept-Encoding: gzip, deflate, br Accept-Language: en-US,en;q=0.5 Connection: keep-alive Host: 127.0.0.1:3001 Sec-Fetch-Dest: document Sec-Fetch-Mode: navigate Sec-Fetch-Site: none Sec-Fetch-User: ?1 Upgrade-Insecure-Requests: 1 User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:120.0) Gecko/20100101 Firefox/120.0
我的Node.js服务中设置响应头的代码如下:
app.use(function (req, res, next) { res.header("Access-Control-Allow-Origin", "*"); // 后续可修改为实际请求来源域名 res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept"); });
排查与解决思路
- 清理隐藏字符:直接重新编写设置
Access-Control-Allow-Origin的代码行,避免复制粘贴引入的不可见空白字符(如全角空格、制表符),确保值就是纯*。 - 检查Nginx配置冲突:响应头显示由Nginx提供服务,需确认Nginx配置中是否也添加了
Access-Control-Allow-Origin头。如果有,要么删除Node.js中的对应设置,要么统一两者的CORS规则,避免重复设置导致的异常。 - 切换OpenVPN协议:UDP转发可能存在数据包篡改风险,尝试改用TCP协议的OpenVPN连接测试,同时检查端口转发规则是否正确,确保请求头未被中间代理修改。
- 升级Node.js版本:部分旧版Node.js对HTTP头字符校验过于严格,升级到v18及以上的稳定版本,可能消除该字符无效错误。
内容的提问来源于stack exchange,提问作者Md. Kamrul Hassan Rasel
相关产品推荐
相关产品推荐

