Node.js URL路径取消引用路径名中的保留字符(有时)

时间:2019-06-27 04:41:19

标签: node.js cloudflare-workers

这有点奇怪(node repl v8.15.0):

let URL = require('url').URL
let {pathname} = new URL('https://my.domain.com/e30%3D/with%3F')
console.log(pathname) // logs '/e30%3D/with%3F' <-- this looks right

然后在我的CloudFlare worker中(使用service-worker-mock):

let URL = require('url').URL
let {pathname} = new URL('https://my.domain.com/e30%3D/with%3F')
console.log(pathname) // logs '/e30=/abc%21%3Fdef' <-- `=` unquoted in path? 

我猜想它可能是URL的另一个版本?反正我可以控制吗?

1 个答案:

答案 0 :(得分:0)

您期望两个URL实现以相同的方式解析实际上是正确的,如果您打开检查器并运行第二个代码,则它应该以您期望的方式进行编码。不幸的是,正如Harris所指出的那样,Workers URL的实现有很多错误并且很难修复。我建议您在代码中使用某种URL polyfill来正确编码URL。