如何在SpringBoot/Tomcat的URL查詢字串中的支援括號?

banq發表於2019-11-27

有些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。

相關文章