zoukankan      html  css  js  c++  java
  • 异常-400- Invalid character found in the request target. The valid characters are defined in RFC 7230 and RFC 3986

    描述:在业务对接的时候有个接口中的参数是包含特殊字符的,如下图:

     由于有特殊字符,会被tomcat拦截,因此需要做一些处理

    解决:

    (1)在springboot项目中:

    注入bean

        @Bean
        public ConfigurableServletWebServerFactory webServerFactory() {
        TomcatServletWebServerFactory factory = new TomcatServletWebServerFactory();
            factory.addConnectorCustomizers(connector -> {
                connector.setProperty("relaxedQueryChars", "|{}[]");
            });
            return factory;
        }

    (2)在tomcat中:

    修改conf目录下server.xml,加入

    relaxedPathChars="|{}[]"
    relaxedQueryChars="|{}[]"
        <Connector port="8080" protocol="HTTP/1.1"
                   connectionTimeout="20000"
                   redirectPort="8443"
                   relaxedPathChars="|{}[]"   
                   relaxedQueryChars="|{}[]"/>

    参考:https://tomcat.apache.org/tomcat-9.0-doc/config/http.html

    (3)在网上还查到另一种解决方案:

    修改conf/catalina.properties

    在最后加上

    tomcat.util.http.parser.HttpParser.requestTargetAllow=|{}
    org.apache.tomcat.util.buf.UDecoder.ALLOW_ENCODED_SLASH=true

    问题:虽然在tomcat8,tomcat9的文档中都写了relaxedQueryChars,relaxedPathChars两个参数的用法,但是在某些版本里面并不适用,我经常使用的tomcat8.5这个版本是生效的.tomcat9.0.5这个版本的不生效的,tomcat8.0.43这个版本是生效的.

  • 相关阅读:
    mongoDB看这篇就够了
    放不下
    jmeter连接不上MySQL数据库的原因以及解决方法
    SecureCRT自动断开连接的解决方法
    Linux及Windows查看占用端口的进程
    网络基础知识
    selenium中driver.close()和driver.quit()的不同点
    day2_窗口句柄切换
    day6_异常捕捉
    day6_logging模块
  • 原文地址:https://www.cnblogs.com/excellencesy/p/14499346.html
Copyright © 2011-2022 走看看