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这个版本是生效的.

  • 相关阅读:
    XML的语法
    dell omsa 监控,Nrpe信号量泄露
    cx_Oracle 报错 Reason: image not found
    cx_Oracle 中文乱码问题解决
    High Memory in the Linux Kernel
    使用二分法查找mobile文件中区号归属地
    mysql 导出csv
    行删除按钮功能
    vsftp 根据用户设置
    安装zabbix报错configure: error: libcurl library not found
  • 原文地址:https://www.cnblogs.com/excellencesy/p/14499346.html
Copyright © 2011-2022 走看看