- 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中定义的A标签(应用程序的国际化域名的有效字符串的ASCII兼容编码(ACE)形式(IDNA))来支持国际化域名(IDN)。
请注意,
SNIHostName
对象是不可变的。- 从以下版本开始:
- 1.8
- 另请参见:
-
SNIServerName
,StandardConstants.SNI_HOST_NAME
-
-
构造方法摘要
构造方法 构造器 描述 SNIHostName(byte[] encoded)
使用指定的编码值创建SNIHostName
。SNIHostName(String hostname)
使用指定的主机名创建SNIHostName
。
-
方法摘要
所有方法 静态方法 实例方法 具体的方法 变量和类型 方法 描述 static SNIMatcher
createSNIMatcher(String regex)
为SNIHostName
创建一个SNIMatcher
对象。boolean
equals(Object other)
将此服务器名称与指定的对象进行比较。String
getAsciiName()
返回此SNIHostName
对象的StandardCharsets.US_ASCII
兼容主机名。int
hashCode()
返回此SNIHostName
的哈希码值。String
toString()
返回对象的字符串表示形式,包括此SNIHostName
对象中的DNS主机名。-
声明方法的类 javax.net.ssl.SNIServerName
getEncoded, getType
-
-
-
-
构造方法详细信息
-
SNIHostName
public SNIHostName(String hostname)
使用指定的主机名创建SNIHostName
。请注意,根据RFC 6066 ,主机名的编码服务器名称值为
StandardCharsets.US_ASCII
-compliant 。 在该方法中,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
-compliant 。 但是,在先前版本的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
小号 - 异常
-
NullPointerException
- 如果regex
是null
-
PatternSyntaxException
- if the regular expression's syntax is invalid
-
-