在 JavaScript 中,使用
URL
对象更改给定 URL 的协议时似乎存在一些限制。但是,我找不到记录此行为的位置(URL
,URL.prototype.protocol
)或为什么要让它这样工作。
有人能解释一下吗?
编辑:跨 JS 运行时的行为似乎不一致。 Firefox、Node 和 Deno 都“拒绝”更改协议,但 Chrome、Safari 和 Bun 都“遵守”更改……
const url1 = new URL('http://example.com')
console.log(url1.protocol) // http:
url1.protocol = 'https:'
console.log(url1.protocol) // https:
const url2 = new URL('webcal://example.com')
console.log(url2.protocol) // webcal:
url2.protocol = 'https:'
console.log(url2.protocol) // webcal:, but should be https:
这是 Node.js 的文档:
WHATWG URL 标准考虑了一些 URL 协议方案来 就它们的解析和序列化方式而言,它们是“特殊”的。当一个 URL 使用这些特殊协议之一进行解析,
例如,从url.protocol
属性可以更改为其他特殊协议,但是 不能更改为非特殊协议,反之亦然。http
更改为
有效:[...]但是,从 http 更改为假设的 Fish 协议并不意味着 因为新协议并不特殊。 […]https
同样,从非特殊协议更改为特殊协议 也是不允许的:[...]
根据WHATWG URL标准,特殊的协议方案是
ftp
、
、file
、http
、https
和ws
。 您的wss
webcal
协议不在该列表中,因此您无法将其更改为
https
。