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

  • 相关阅读:
    1. Window环境下
    A-Frame 简介03
    A-frame_02
    A-Frame_简单介绍
    iOS_UIWebView加载本地html文件路径问题
    AVAudioRecorder 录制音频
    内存管理, 对象的生命周期
    02-socket编程
    01-socket第三方库 AsyncSocket(GCDAsyncSocket)
    01-MKNetworkKit介绍及使用
  • 原文地址:https://www.cnblogs.com/excellencesy/p/14499346.html
Copyright © 2011-2022 走看看