host_name 的服务名称。
如 TLS 扩展 (RFC 6066) 的第 3 节“服务名称指示”中所述,“主机名”包含服务的完全限定 DNS 主机名,如客户端所理解的那样。主机名的编码服务名称值使用不带尾随点的 ASCII 编码表示为字节字符串。这允许通过使用 RFC 5890 中定义的 A 标签(国际化域名应用程序 (IDNA) 的有效字符串的 ASCII 兼容编码 (ACE) 形式)支持国际化域名 (IDN)。
请注意,SNIHostName 对象是不可变的。
- 自从:
- 1.8
- 参见:
-
构造方法总结
构造方法构造方法描述SNIHostName(byte[] encoded) 使用指定的编码值创建一个SNIHostName。SNIHostName(String hostname) 使用指定的主机名创建一个SNIHostName。 -
方法总结
修饰符和类型方法描述static SNIMatchercreateSNIMatcher(String regex) 为SNIHostNames 创建一个SNIMatcher对象。boolean将此服务名称与指定对象进行比较。返回此SNIHostName对象的StandardCharsets.US_ASCII兼容主机名。inthashCode()返回此SNIHostName的哈希码值。toString()返回对象的字符串表示形式,包括此SNIHostName对象中的 DNS 主机名。在类 javax.net.ssl.SNIServerName 中声明的方法
getEncoded, getType
-
构造方法详细信息
-
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是nullIllegalArgumentException- 如果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兼容的字符集,并对主机名中的 ASCII 字符实施限制(参见 RFC 3490 、 RFC 1122 、 RFC 1123 )作为encoded参数,或者使用SNIHostName(String)代替。encoded参数在以下情况下是非法的:encoded是空的,encoded以尾随点结尾,encoded未在StandardCharsets.US_ASCII或StandardCharsets.UTF_8兼容字符集中编码,encoded不是符合 RFC 3490 规范的有效国际化域名 (IDN)。
请注意,克隆
encoded字节数组以防止后续修改。- 参数:
encoded- 此服务名称的编码主机名- 抛出:
NullPointerException- 如果encoded是nullIllegalArgumentException- 如果encoded是非法的
-
-
方法详情
-
getAsciiName
返回此SNIHostName对象的StandardCharsets.US_ASCII兼容主机名。请注意,根据 RFC 6066 ,返回的主机名可能是包含 A 标签的国际化域名。有关详细的 A 标签规范的更多信息,请参阅 RFC 5890。
- 返回:
-
这个
SNIHostName对象的StandardCharsets.US_ASCII兼容主机名
-
equals
将此服务名称与指定对象进行比较。根据 RFC 6066 ,DNS 主机名不区分大小写。当且仅当两个服务主机名具有相同的名称类型并且主机名在大小写无关的比较中相等时,它们才相等。
- 重写:
equals在类SNIServerName中- 参数:
other- 要与之比较的其他服务名称对象。- 返回:
-
当且仅当
other被认为等于此实例时才为真 - 参见:
-
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
为SNIHostNames 创建一个SNIMatcher对象。服务可以使用此方法来验证可接受的
SNIHostNames。例如,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- 正则表达式模式 表示要匹配的主机名- 返回:
SNIHostName的SNIMatcher对象- 抛出:
NullPointerException- 如果regex是nullPatternSyntaxException- 如果正则表达式的语法无效
-