java - 使用tomcat在Content-type header 响应中保留分号后的空格

标签 java tomcat servlets http-headers tomcat8.5

我们有一个遗留 客户端使用部署在 tomcat 8.5 上的 servlet。 此旧版客户端正在等待此格式的内容类型 header 响应(注意分号和“字符集”之间的空格):

Content-type: text/xml; charset=utf-8

然而,在服务器端,Tomcat 总是修剪这个空白,尽管我们在 servlet 中强制这样做:

response.setContentType("text/xml; charset=utf-8");

或者甚至在具有自定义扩展 HttpServletResponseWrapper 的过滤器中,如 this question 中所建议的那样.

无论我尝试什么,返回的内容类型 header 总是没有空格。

Content-type: text/xml;charset=utf-8

作为引用,我在tomcat官方找到了这个documentation :

Tomcat removes blank chars between the ';' and the 'charset' keyword

我知道 http 标准说分号后的空格是可选的,如其他 SO post 中所述但是由于有问题的客户端运行的是旧版本,我想知道是否有任何方法可以强制 tomcat 保留此空白。

我正在考虑其他选择,例如修改 apache 或 nginx(在 tomcat 之上)中的内容类型 header ,但如果可能的话,我更喜欢 tomcat 级别的解决方案。

如有任何帮助,我们将不胜感激。

最佳答案

如评论中所述,这是我们无法避免的事情,因为它已硬编码在 tomcat source code 中。

在我们的特定用例中,我们终于能够稍微更改旧版客户端,因此现在它可以处理标准格式(无空格)的内容类型 header 。

感谢@zack6849 指点。

关于java - 使用tomcat在Content-type header 响应中保留分号后的空格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49409116/

相关文章:

java - 显式转换为相同类型

java - 线程池大小应远大于核心数 + 1

java - eclipse mars 中 apache tomcat 8startup 的问题

java - 哪些 servlet 是预初始化的好成员?

java - DBUnit PostgresqlDataTypeFactory 不识别枚举列表

java - apache http 客户端请求重定向

java - java MYSQL 删除最后一行

java - 在 AWS Elastic Beanstalk 应用程序中运行 Tomcat Docker 时的端口转发

java - 客户端可以在没有请求的情况下获得 servlet 的响应吗?

javascript - 从 Ajax 传递时数组值变为 null