【发布时间】:2026-01-07 15:25:02
【问题描述】:
我知道 URI 支持以下语法:
http://[user]:[password]@[domain.tld]
当没有密码或者密码为空时,是否有冒号?
换句话说,我应该接受这个:
http://[user]:@[domain.tld]
或者这个:
http://[user]@[domain.tld]
或者它们都有效?
【问题讨论】:
我知道 URI 支持以下语法:
http://[user]:[password]@[domain.tld]
当没有密码或者密码为空时,是否有冒号?
换句话说,我应该接受这个:
http://[user]:@[domain.tld]
或者这个:
http://[user]@[domain.tld]
或者它们都有效?
【问题讨论】:
当前的 URI 标准 (STD 66) 是 RFC 3986,相关部分是 3.2.1. User Information。
这里定义了 userinfo 子组件(后面跟着@)可以包含以下任意组合
:,所以这意味着你的两个例子都是有效的。
但是,请注意user:password 格式已弃用。无论如何,他们给出了应用程序应该如何处理此类 URI 的建议,即应用程序不应显示第一个 : 字符之后的所有内容,除非
冒号后面的数据是空字符串(表示没有密码)。
所以根据这个建议,userinfo子组件user:表示有用户名“user”,没有密码。
【讨论】:
这更像是方便,两者都是有效的。我会选择http://[user]@[domain.tld](并提示输入密码。)因为它简单且不含糊。在:之后,用户没有任何机会去思考是否需要添加任何东西
【讨论】: