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に渡せるパラメータの判別が厳密になったらしい。
回避方法としては上記のエントリにも書いてますが、忘れないためこちらでも書いておきます。relaxedPathChars、relaxedQueryCharsを追加する。
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" relaxedPathChars="[]|" relaxedQueryChars="[]|{}^\`" />