host_name
的服务器名称。
如TLS扩展(RFC 6066)的第3节“Server Name Indication”中所述,“HostName”包含服务器的完全限定的DNS主机名,客户端可以理解。主机名的编码服务器名称值使用ASCII编码表示为字节字符串,不带尾部点。这允许通过使用在RFC 5890中定义的A标签(国际化域名应用程序(IDNA)的有效字符串的ASCII兼容编码(ACE)形式)支持国际化域名(IDN)。
请注意,SNIHostName
对象是不可变的。
- 自版本:
- 1.8
- 参见:
-
Constructor Summary
ConstructorDescriptionSNIHostName
(byte[] encoded) 使用指定的编码值创建一个SNIHostName
。SNIHostName
(String hostname) 使用指定的主机名创建一个SNIHostName
。 -
Method Summary
Modifier and TypeMethodDescriptionstatic SNIMatcher
createSNIMatcher
(String regex) 为SNIHostName
创建一个SNIMatcher
对象。boolean
将此服务器名称与指定对象进行比较。返回此SNIHostName
对象的符合StandardCharsets.US_ASCII
的主机名。int
hashCode()
返回此SNIHostName
的哈希码值。toString()
返回对象的字符串表示,包括此SNIHostName
对象中的DNS主机名。Methods declared in class javax.net.ssl.SNIServerName
getEncoded, getType
-
Constructor Details
-
SNIHostName
使用指定的主机名创建一个SNIHostName
。请注意,根据RFC 6066,主机名的编码服务器名称值符合
StandardCharsets.US_ASCII
。在此方法中,hostname
可以是用户友好的国际化域名(IDN)。使用IDN.toASCII(String, int)
来强制执行主机名中ASCII字符的限制(请参阅RFC 3490,RFC 1122,RFC 1123)并将hostname
转换为ASCII兼容编码(ACE),如下所示:IDN.toASCII(hostname, IDN.USE_STD3_ASCII_RULES);
如果
hostname
参数违规,则是非法的:hostname
为空,hostname
以尾部点结尾,hostname
不符合RFC 3490规范的有效国际化域名(IDN)。
- 参数:
-
hostname
- 此服务器名称的主机名 - 抛出:
-
NullPointerException
- 如果hostname
为null
-
IllegalArgumentException
- 如果hostname
是非法的
-
SNIHostName
public SNIHostName(byte[] encoded) 使用指定的编码值创建一个SNIHostName
。此方法通常用于解析请求的SNI扩展中的编码名称值。
根据RFC 6066,主机名的编码名称值是符合
StandardCharsets.US_ASCII
的。然而,在SNI扩展的先前版本(RFC 4366)中,编码主机名以使用UTF-8编码的字节字符串表示。为了版本兼容性,此方法允许encoded
参数的字符集可以是StandardCharsets.UTF_8
,以及StandardCharsets.US_ASCII
。使用IDN.toASCII(String)
来将encoded
参数转换为ASCII兼容编码(ACE)主机名。强烈建议仅在解析请求的SNI扩展中的编码名称值时使用此构造函数。否则,为了符合RFC 6066,请始终使用
StandardCharsets.US_ASCII
兼容的字符集,并强制执行对encoded
参数中主机名的ASCII字符的限制(请参阅RFC 3490,RFC 1122,RFC 1123),或者改用SNIHostName(String)
。如果
encoded
参数违规,则是非法的:encoded
为空,encoded
以尾部点结尾,encoded
未使用StandardCharsets.US_ASCII
或StandardCharsets.UTF_8
兼容的字符集进行编码,encoded
不符合RFC 3490规范的有效国际化域名(IDN)。
请注意,
encoded
字节数组会被克隆以防止后续修改。- 参数:
-
encoded
- 此服务器名称的编码主机名 - 抛出:
-
NullPointerException
- 如果encoded
为null
-
IllegalArgumentException
- 如果encoded
是非法的
-
-
Method Details
-
getAsciiName
返回此SNIHostName
对象的符合StandardCharsets.US_ASCII
的主机名。请注意,根据RFC 6066,返回的主机名可能是包含A标签的国际化域名。有关详细A标签规范的更多信息,请参阅RFC 5890。
- 返回:
-
此
SNIHostName
对象的符合StandardCharsets.US_ASCII
的主机名
-
equals
将此服务器名称与指定对象进行比较。根据RFC 6066,DNS主机名不区分大小写。仅当两个服务器主机名在不区分大小写的比较中具有相同的名称类型且主机名相等时,它们才相等。
- 覆盖:
-
equals
在类中SNIServerName
- 参数:
-
other
- 要与此实例比较的其他服务器名称对象。 - 返回:
-
如果且仅如果
other
被视为等于此实例,则返回true - 参见:
-
hashCode
public int hashCode()返回此SNIHostName
的哈希码值。哈希码值是使用此
SNIHostName
的不区分大小写的主机名生成的。- 覆盖:
-
hashCode
在类中SNIServerName
- 返回:
-
此
SNIHostName
的哈希码值。 - 参见:
-
toString
返回对象的字符串表示,包括此SNIHostName
对象中的DNS主机名。表示的确切细节未指定且可能会更改,但以下内容可能被视为典型:
"type=host_name (0), value=<hostname>"
"<hostname>"是主机名的ASCII表示,可能包含A标签。例如,伪主机名的返回值可能如下所示:"type=host_name (0), value=www.example.com"
或"type=host_name (0), value=xn--fsqu00a.xn--0zwm56d"
请注意,表示的确切细节未指定且可能会更改。
- 覆盖:
-
toString
在类中SNIServerName
- 返回:
- 对象的字符串表示。
-
createSNIMatcher
为SNIHostName
创建一个SNIMatcher
对象。此方法可用于服务器验证可接受的
SNIHostName
。例如,SNIMatcher matcher = SNIHostName.createSNIMatcher("www\\.example\\.com");
将接受主机名"www.example.com"。SNIMatcher matcher = SNIHostName.createSNIMatcher("www\\.example\\.(com|org)");
将接受主机名"www.example.com"和"www.example.org"。- 参数:
-
regex
- 表示要匹配的主机名的正则表达式模式 - 返回:
-
一个
SNIMatcher
对象,用于SNIHostName
- 抛出:
-
NullPointerException
- 如果regex
为null
-
PatternSyntaxException
- 如果正则表达式的语法无效
-