Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

nacos-server rest接口请求参数反序列化问题 #3673

Closed
dengjt-1010 opened this issue Aug 24, 2020 · 8 comments
Closed

nacos-server rest接口请求参数反序列化问题 #3673

dengjt-1010 opened this issue Aug 24, 2020 · 8 comments

Comments

@dengjt-1010
Copy link

dengjt-1010 commented Aug 24, 2020

Describe the bug
当用户发布请求时候,比如发布如下配置,会有异常:

nacos.log中的异常日志:

020-08-24 15:34:31,074 INFO Error parsing HTTP request header
Note: further occurrences of HTTP request parsing errors will be logged at DEBUG level.

java.lang.IllegalArgumentException: Invalid character found in the request target. The valid characters are defined in RFC 7230 and RFC 3986
at org.apache.coyote.http11.Http11InputBuffer.parseRequestLine(Http11InputBuffer.java:467)
at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:294)
at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:791)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1417)
at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Thread.java:748)

配置:

{
    "type": "sharding",
    "name": "abcdef_ghijkmln_shard",
    "endpoints": [
    {
        "url": "jdbc:mysql://abc-mysql-test-:3306/abcdef_ghijkmln_0?user=abcdef&password=abcdef123",
        "roles": ["write", "read"],
        "shard": "0"
    },
    {
        "url": "jdbc:mysql://abc-mysql-test-:3306/abcdef_ghijkmln_1?user=abcdef&password=abcdef123",
        "roles": ["write", "read"],
        "shard": "1"
    },
    {
        "url": "jdbc:mysql://abc-mysql-test-:3306/abcdef_ghijkmln_0?user=abcdef&password=abcdef123",
        "roles": ["read"],
        "shard": "0"
    },
    {
        "url": "jdbc:mysql://abc-mysql-test-:3306/abcdef_ghijkmln_1?user=abcdef&password=abcdef123",
        "roles": ["read"],
        "shard": "1"
    }
    ],
    "pools": [
    {
 
    }
    ],
    "extra": {
        "bindingTables": [ "ghijkmln_mygod", "ghijkmln_mygod_delivery", "team_student", "ghijkmln_mygod_tx_record", "ghijkmln_mygod_lid", "team_student_lid" ],
        "broadcastTables": [],
        "tableRules": [
        {
            "logicalTable": "ghijkmln_mygod",
            "actualDataNodes": "abcdef_ghijkmln_shard0.ghijkmln_mygod_${0..255}, abcdef_ghijkmln_shard1.ghijkmln_mygod_${256..511}",
            "databaseSharding": {
                "type": "inline",
                "params": {
                    "column": "mmmkkekeke",
                    "expression": "abcdef_ghijkmln_shard${mmmkkekeke % 2}"
                }
            },
            "tableSharding": {
                "type": "inline",
                "params": {
                    "column": "mmmkkekeke",
                    "expression": "ghijkmln_mygod_${(mmmkkekeke % 2) * 256 + (mmmkkekeke % 256)}"
                }
            },
            "keyGeneratorConfig": {
                "column": "1",
                "type": "NONE"
            }
        },
        {
            "logicalTable": "ghijkmln_mygod_lid",
            "actualDataNodes": "abcdef_ghijkmln_shard0.ghijkmln_mygod_lid_${0..255}, abcdef_ghijkmln_shard1.ghijkmln_mygod_lid_${256..511}",
            "databaseSharding": {
                "type": "inline",
                "params": {
                    "column": "mmmkkekeke",
                    "expression": "abcdef_ghijkmln_shard${mmmkkekeke % 2}"
                }
            },
            "tableSharding": {
                "type": "inline",
                "params": {
                    "column": "mmmkkekeke",
                    "expression": "ghijkmln_mygod_lid_${(mmmkkekeke % 2) * 256 + (mmmkkekeke % 256)}"
                }
            },
            "keyGeneratorConfig": {
                "column": "1",
                "type": "NONE"
            }
        },
        {
            "logicalTable": "team_student",
            "actualDataNodes": "abcdef_ghijkmln_shard0.team_student_${0..255}, abcdef_ghijkmln_shard1.team_student_${256..511}",
            "databaseSharding": {
                "type": "inline",
                "params": {
                    "column": "mmmkkekeke",
                    "expression": "abcdef_ghijkmln_shard${mmmkkekeke % 2}"
                }
            },
            "tableSharding": {
                "type": "inline",
                "params": {
                    "column": "mmmkkekeke",
                    "expression": "team_student_${(mmmkkekeke % 2) * 256 + (mmmkkekeke % 256)}"
                }
            },
            "keyGeneratorConfig": {
                "column": "1",
                "type": "NONE"
            }
        },
        {
            "logicalTable": "team_student_lid",
            "actualDataNodes": "abcdef_ghijkmln_shard0.team_student_lid_${0..255}, abcdef_ghijkmln_shard1.team_student_lid_${256..511}",
            "databaseSharding": {
                "type": "inline",
                "params": {
                    "column": "mmmkkekeke",
                    "expression": "abcdef_ghijkmln_shard${mmmkkekeke % 2}"
                }
            },
            "tableSharding": {
                "type": "inline",
                "params": {
                    "column": "mmmkkekeke",
                    "expression": "team_student_lid_${(mmmkkekeke % 2) * 256 + (mmmkkekeke % 256)}"
                }
            },
            "keyGeneratorConfig": {
                "column": "1",
                "type": "NONE"
            }
        },
        {
            "logicalTable": "ghijkmln_mygod_delivery",
            "actualDataNodes": "abcdef_ghijkmln_shard0.ghijkmln_mygod_delivery_${0..255}, abcdef_ghijkmln_shard1.ghijkmln_mygod_delivery_${256..511}",
            "databaseSharding": {
                "type": "inline",
                "params": {
                    "column": "mmmkkekeke",
                    "expression": "abcdef_ghijkmln_shard${mmmkkekeke % 2}"
                }
            },
            "tableSharding": {
                "type": "inline",
                "params": {
                    "column": "mmmkkekeke",
                    "expression": "ghijkmln_mygod_delivery_${(mmmkkekeke % 2) * 256 + (mmmkkekeke % 256)}"
                }
            },
            "keyGeneratorConfig": {
                "column": "1",
                "type": "NONE"
            }
        },
        {
            "logicalTable": "ghijkmln_mygod_tx_record",
            "actualDataNodes": "abcdef_ghijkmln_shard0.ghijkmln_mygod_tx_record_${0..255}, abcdef_ghijkmln_shard1.ghijkmln_mygod_tx_record_${256..511}",
            "databaseSharding": {
                "type": "inline",
                "params": {
                    "column": "mmmkkekeke",
                    "expression": "abcdef_ghijkmln_shard${mmmkkekeke % 2}"
                }
            },
            "tableSharding": {
                "type": "inline",
                "params": {
                    "column": "mmmkkekeke",
                    "expression": "ghijkmln_mygod_tx_record_${(mmmkkekeke % 2) * 256 + (mmmkkekeke % 256)}"
                }
            },
            "keyGeneratorConfig": {
                "column": "1",
                "type": "NONE"
            }
        }
        ],
        "dataSourceName": "ghijkmlnmygodShardDs"
    }
}

Expected behavior

Acutally behavior

How to Reproduce

Desktop (please complete the following information):
nacos版本1.3.0

Additional context
解决办法:在server端添加

@Configuration
public class TomcatConfig {

    @Bean
    public TomcatServletWebServerFactory webServerFactory() {
        TomcatServletWebServerFactory factory = new TomcatServletWebServerFactory();
        factory.addConnectorCustomizers((Connector connector) -> {
            connector.setProperty("relaxedPathChars", "\"<>[\\]^`{|}");
            connector.setProperty("relaxedQueryChars", "\"<>[\\]^`{|}");
        });
        return factory;
    }
}

在项目配置文件中添加配置
server:
max-http-header-size: 10000000

@dengjt-1010
Copy link
Author

#1636 与这个issue类似。

@dengjt-1010
Copy link
Author

这个issue 可能也不算是个bug,大家遇到了可以参考一下这个解决办法。

@KomachiSion
Copy link
Collaborator

没太看懂问题, 这个错难道不是请求使用了保留字符导致的吗?

@dengjt-1010
Copy link
Author

嗯, header的size也需要设置大一点才解决了这个问题。
还需要下面这个配置才行
server:
max-http-header-size: 10000000

@KomachiSion
Copy link
Collaborator

我在demo 控制台试了一下, 没有出现这个问题
可以升级到1.3.2再试一下

@dengjt-1010
Copy link
Author

看起来新版本确实没这个问题,多谢啦。

@dengjt-1010
Copy link
Author

不要这样改。这样改有问题。

@huangsav
Copy link

huangsav commented Aug 12, 2021

你好, 在1.3.2版本,k8s环境下, 集群上的nacos实例也出现了这样的报错。
2021-08-12 13:01:17,925 INFO Error parsing HTTP request header
Note: further occurrences of HTTP request parsing errors will be logged at DEBUG level.

java.lang.IllegalArgumentException: Invalid character found in method name. HTTP method names must be tokens
at org.apache.coyote.http11.Http11InputBuffer.parseRequestLine(Http11InputBuffer.java:414)
at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:294)
at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:791)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1417)
at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Thread.java:748)
2021-08-12 13:01:21,938 INFO Error parsing HTTP request header
Note: further occurrences of HTTP request parsing errors will be logged at DEBUG level.

java.lang.IllegalArgumentException: Invalid character found in the HTTP protocol
at org.apache.coyote.http11.Http11InputBuffer.parseRequestLine(Http11InputBuffer.java:531)
at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:294)
at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:791)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1417)
at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Thread.java:748)
2021-08-12 13:01:39,209 INFO Error parsing HTTP request header
Note: further occurrences of HTTP request parsing errors will be logged at DEBUG level.

java.lang.IllegalArgumentException: Invalid character found in method name. HTTP method names must be tokens
at org.apache.coyote.http11.Http11InputBuffer.parseRequestLine(Http11InputBuffer.java:414)
at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:294)
at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:791)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1417)
at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Thread.java:748)
2021-08-12 13:02:12,410 INFO Error parsing HTTP request header
Note: further occurrences of HTTP request parsing errors will be logged at DEBUG level.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

3 participants