Javascript 使用Node.js中的Unicode字符解码HTTP头

Javascript 使用Node.js中的Unicode字符解码HTTP头,javascript,node.js,internet-explorer,cors,punycode,Javascript,Node.js,Internet Explorer,Cors,Punycode,我有一个运行以下cors中间件配置的Express服务器: app.use( 科尔斯({ 来源:[ /^http:\/\/localhost:\d+/, /^https:\/\/жжжжжжжжжжжажжжж, /^https:\/\/xn--80adfecflqzagb7a3ioc\.xn--j1amh/,, ], }), ); (xn--80adfecflqzagb7a3ioc.xn--j1amh是的Punycode表示形式 我已从托管在的页面请求。大多数浏览器在Origin标题中发送P

我有一个运行以下
cors
中间件配置的Express服务器:

app.use(
科尔斯({
来源:[
/^http:\/\/localhost:\d+/,
/^https:\/\/жжжжжжжжжжжажжжж,
/^https:\/\/xn--80adfecflqzagb7a3ioc\.xn--j1amh/,,
],
}),
);
xn--80adfecflqzagb7a3ioc.xn--j1amh
的Punycode表示形式

我已从托管在的页面请求。大多数浏览器在
Origin
标题中发送Punycode表示,其工作原理与预期一致

但是IE11发送原始的
https://жжжжжжжж。ажжжажжж。它应该与列表中的第二个正则表达式匹配,但在服务器端,我从
req.headers.origin
中获得以下头值:
来源:https://ñоÐÐÐниÐÐÐÐÐÐн.ÐÐÐ
显然,它与任何正则表达式都不匹配(某些字符可能显示不正确,但您知道了-字符集是错误的)


有可能解决这个问题吗?我想我可能应该设置编码,但我不知道在哪里做,选择哪一个。感谢您的帮助

首先,问题不在于字符集。由于某些原因,Node.js无法处理西里尔文字符,因此无法正确解码。我没有找到解决这个问题的正确方法,所以如果有人在这里发帖,我会非常高兴:)

但我有一个解决办法。我找到了一个网站,它可以修复我的
源代码
值,并使其成为
https://жжжжжжж.жжжжжжж。我在DevTools中查看了它的源代码,它使用了一些库文件
unicode.min.js
(奇怪的是,我还没有找到它的GitHub repo或源代码)。这里有一个指向该库的链接:(万一它坏了,我在谷歌硬盘上做了一个备份:)

现在,我可以像这样使用代码中的库来转换
Origin
字符串:

//加载西里尔字母
//查看“Unicode.blocks”查看可用块的列表,
//然后调用'Unicode.load(,)`
Unicode.load(10241279);
//修理绳子
Unicode.fix('https://ÐоÐÐÐÐÐниÐÐÐÐÐнŒÐÐÐÐÐÐÐÐÐÐÐ返回“https://
我知道这不是一个合适的解决方案,但它能解决问题,我希望它能对任何偶然发现这个问题的人有所帮助。事实上,这是一个更普遍的问题:在Node.js中处理HTTP头中的非ASCII字符-与CORS没有严格的关系


更新:我已经通过一个美容师运行了库代码,并研究了它的代码。作者做得非常好,但是,在我看来,特别是为了解码HTTP头,这有点过分了。有很多机会可以提高性能和降低复杂性,所以我建议所有想要使用这个库的人都来看看代码,并对其进行重构,以更好地适应您的特定用例——我就是这么做的。我对结果感到满意,我认为它可以被宣布为问题的一个很好的解决方案

感谢您发布此问题的解决方案。您可以将您的答案标记为已接受的答案。它可以在将来帮助其他社区成员解决类似的问题。谢谢你的理解。