字符[_]在域名中永远无效

时间:2018-11-27 17:15:14

标签: tomcat

我有一个例外,下划线不能在域名中使用。我想知道此异常是特定于版本还是下划线不能在域名中给出。如果是特定于版本的,请建议我如何解决它。

  

java.lang.IllegalArgumentException:字符[_]永远无效   在一个域名中。在   org.apache.tomcat.util.http.parser.HttpParser $ DomainParseState.next(HttpParser.java:946)     在   org.apache.tomcat.util.http.parser.HttpParser.readHostDomainName(HttpParser.java:842)     在org.apache.tomcat.util.http.parser.Host.parse(Host.java:66)处   org.apache.tomcat.util.http.parser.Host.parse(Host.java:40)在   org.apache.coyote.AbstractProcessor.parseHost(AbstractProcessor.java:277)     在   org.apache.coyote.ajp.AjpProcessor.prepareRequest(AjpProcessor.java:934)     在org.apache.coyote.ajp.AjpProcessor.service(AjpProcessor.java:456)     在   org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)     在   org.apache.coyote.AbstractProtocol $ ConnectionHandler.process(AbstractProtocol.java:800)     在   org.apache.tomcat.util.net.NioEndpoint $ SocketProcessor.doRun(NioEndpoint.java:1471)     在   org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)     在   java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)     在   java.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:617)     在   org.apache.tomcat.util.threads.TaskThread $ WrappingRunnable.run(TaskThread.java:61)     在java.lang.Thread.run(Thread.java:745)

2 个答案:

答案 0 :(得分:1)

Tomcat 8.5.x和更高版本实现strict RFC-compliant hostnames as a security precaution。 HTTP RFC require host-header validation,因此Tomcat执行该验证。

trail中有RFCs,需要进行这种检查并定义主机名中可以和不能的内容。

您唯一的选择是降级Tomcat(不推荐)或将您的主机名固定为有效域名。

答案 1 :(得分:0)

您可以使用 SpringBoot:1.4.2.RELEASE 的较低版本,此版本使用嵌入 8.5.6 的tomcat,该tomcat版本对域不严格。 当我使用 SpringBoot:1.5.20.RELEASE (其中 tomcat版本是8.5.39 )时遇到了相同的问题,因此可以尝试使用较低的版本,或者修改tomcat版本,如果使用gradle编译项目,则可以将此代码片段添加到您的 build.gradle

configurations.all {
resolutionStrategy.eachDependency { DependencyResolveDetails details ->
    if (details.requested.group == 'org.apache.tomcat.embed') {
        details.useVersion '8.5.6'
    }
}

}