如何在SpringBoot/Tomcat的URL查询字符串中的支持括号?


有些Web API 在URL查询字符串中使用方括号,典型的例子是Promethues HTTP API,它使用诸如的查询参数如:match【】=<series_selector>。不幸的是,许多浏览器不符合该规范,并以未编码形式使用这些字符。这将导致Tomcat返回400错误。
为解决此问题,Tomcat 8.5.32引入了HTTP连接器的两个配置属性,以放松在URL路径和查询字符串中处理这些字符的限制。只适合如下字符:

" < > [ \ ] ^ `` { | } 

这两个属性是:

  • relaxedPathChars -路径中允许使用未编码的字符
  • relaxedQueryChars -查询字符串中允许使用未编码的字符

如果您使用的是Spring Boot嵌入式Tomcat服务器,则可以使用配置属性 server.tomcat.relaxed-path-chars和server.tomcat.relaxed-query-chars。

在Spring Boot 中2.2.0.M5 添加了Tomcat的这些配置属性。如果您使用的是旧版的Spring Boot,则可能需要切换到另一个servlet容器,例如Undertow。