arcanum_jp’s blog

おっさんの日記

LIFFのURLをたたくと何故かエラーになる

LIFFの画面から自分のサーバーにあるAPIを叩くとこんなエラーが出力・・・なんだろまたか?分からん・・・

30-Oct-2020 06:17:47.776 INFO [http-nio-8080-exec-7] org.apache.coyote.http11.Http11Processor.service 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 [/path/to/api?{%22userId%22:%XXXXXXXXXXXXXXXXXXXX%22}]. The valid characters are defined in RFC 7230 and RFC 3986
                at org.apache.coyote.http11.Http11InputBuffer.parseRequestLine(Http11InputBuffer.java:490)
                at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:261)
                at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)
                at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:868)
                at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1590)
                at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
                at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
                at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
                at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
                at java.base/java.lang.Thread.run(Thread.java:834)


RFC 7230 and RFC 3986に準拠しなさいって?なんだろ?よく見るとLIFFの画面でAPIを叩いているが、APIの処理まで到達していない。ということはLIFF云々以前ではじかれているってことか・・・で、このキーワードで検索していったらこちらのブログ。7.0.76あたりからTomcatのURLに渡せるパラメータの判別が厳密になったらしい。

qiita.com


回避方法としては上記のエントリにも書いてますが、忘れないためこちらでも書いておきます。relaxedPathChars、relaxedQueryCharsを追加する。

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