- java.lang.Object
-
- javax.net.ssl.SNIServerName
-
- javax.net.ssl.SNIHostName
-
public final class SNIHostName extends SNIServerName
此类的实例表示服务器名称指示(SNI)扩展名中的类型为host_name
的服务器名称。如第3部分“服务器名称指示”( TLS Extensions (RFC 6066))中所述 ,“HostName”包含服务器的完全限定DNS主机名,如客户端所了解。 主机名的编码服务器名称值使用ASCII编码表示为字节串,而不带有后跟点。 这允许通过使用在RFC 5890中定义的有效的国际化域名域名(IDNA)的A标签(ASCII兼容编码(ACE))形式来支持国际化域名(IDN)。
请注意,
SNIHostName
对象是不可变的。- 从以下版本开始:
- 1.8
- 另请参见:
-
SNIServerName
,StandardConstants.SNI_HOST_NAME
-
-
构造方法摘要
构造方法 Constructor 描述 SNIHostName(byte[] encoded)
使用指定的编码值创建一个SNIHostName
。SNIHostName(String hostname)
使用指定的主机名创建一个SNIHostName
。
-
方法摘要
所有方法 静态方法 接口方法 具体的方法 Modifier and Type 方法 描述 static SNIMatcher
createSNIMatcher(String regex)
为SNIHostName
创建一个SNIMatcher
对象。boolean
equals(Object other)
将此服务器名称与指定对象进行比较。String
getAsciiName()
返回此SNIHostName
对象的StandardCharsets.US_ASCII
兼容主机名。int
hashCode()
返回此SNIHostName
的哈希码值。String
toString()
返回对象的字符串表示形式,包括此SNIHostName
对象中的DNS主机名。-
Methods inherited from class java.lang.Object
clone, finalize, getClass, notify, notifyAll, wait, wait, wait
-
Methods inherited from class javax.net.ssl.SNIServerName
getEncoded, getType
-
-
-
-
构造方法详细信息
-
SNIHostName
public SNIHostName(String hostname)
使用指定的主机名创建一个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扩展中的编码名称值。
Per 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
是null
-
IllegalArgumentException
- 如果encoded
是非法的
-
-
-
方法详细信息
-
getAsciiName
public String getAsciiName()
返回此SNIHostName
对象的StandardCharsets.US_ASCII
兼容主机名。请注意,根据RFC 6066 ,返回的主机名可能是包含A标签的国际化域名。 有关详细A标签规范的更多信息,请参阅RFC 5890 。
- 结果
-
这个
SNIHostName
对象的StandardCharsets.US_ASCII
兼容主机名
-
equals
public boolean equals(Object other)
将此服务器名称与指定对象进行比较。每RFC 6066 ,DNS主机名不区分大小写。 两个服务器主机名相等,如果且仅当它们具有相同的名称类型,并且主机名在与个别无关的比较中相等。
- 重写:
-
equals
在SNIServerName
- 参数
-
other
- 要与之进行比较的其他服务器名称对象。 - 结果
-
如果,且仅当
other
被视为等于此实例,other
true - 另请参见:
-
Object.hashCode()
,HashMap
-
hashCode
public int hashCode()
返回此SNIHostName
的哈希码值。使用此
SNIHostName
的不区分大小写的主机名生成哈希码值。- 重写:
-
hashCode
在SNIServerName
- 结果
-
这个
SNIHostName
的哈希码值。 - 另请参见:
-
Object.equals(java.lang.Object)
,System.identityHashCode(java.lang.Object)
-
toString
public String 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
public static SNIMatcher createSNIMatcher(String regex)
为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
- 表示要匹配的主机名的 regular expression pattern - 结果
-
一个
SNIMatcher
对象为SNIHostName
s - 异常
-
NullPointerException
- 如果regex
是null
-
PatternSyntaxException
- if the regular expression's syntax is invalid
-
-