如何使用 mod_proxy 保留通过 AJP 连接器发送到 Apache 的 Tomcat HTTP 响应的 Content-Type 标头

2023-11-24

我遇到了 HTTP 响应不正确的问题Content-Type通过 AJP/1.3 连接器访问 Apache 后面的 Tomcat 中托管的 Axis2 Web 服务时,会使用此标头。

我可以通过其 RESTful 接口在浏览器中毫无问题地访问 Web 服务,并且可以看到结果,但不知何故 Apache 正在更改响应Content-TypeTomcat 发送的标头来自text/xml to text/plain它阻止我通过 NetBeans 中的 SOAP 使用 Web 服务,因为Unsupported Content-Type: text/plain Supported ones are: [text/xml]例外。

这是我的 Apache 虚拟主机配置的相关部分:

<VirtualHost *:80>
    ServerAdmin [email protected]
    ServerName  myserver.example
    ServerAlias other.myserver.example

    ProxyPreserveHost On 
    SetEnv force-proxy-request-1.0 1
    SetEnv proxy-nokeepalive 1

    <Location /axis2/services>
        ProxyPass ajp://localhost:8009/axis2/services
        ProxyPassReverse ajp://localhost:8009/axis2/services
    </Location>
</VirtualHost>

以及我的 Tomcat server.xml 的相关部分:

<Connector port="8009" protocol="AJP/1.3" redirectPort="9443" />

<Connector port="9443" protocol="HTTP/1.1" SSLEnabled="true" maxHttpHeaderSize="8192"
    maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
    enableLookups="false" disableUploadTimeout="true"
    acceptCount="100" scheme="https" secure="true"
    clientAuth="false" sslProtocol="TLS"
    SSLCertificateFile="path/to/bundle" 
    SSLCertificateKeyFile="path/to/key"
    SSLPassword="S3cr3t"
    proxyName="myserver.example" proxyPort="443" />

如果我使用端口 8080 上的默认连接器直接在 Tomcat 中访问 WS,我会得到正确的结果content-type但如果我通过 Apache 访问它,我就会得到text/plain,所以肯定是代理的问题。

我怎么解决这个问题?

EDIT:我通过使用 Tomcat HTTP 连接器(而不是 AJP 连接器)进行代理来使其工作,但如果我找到可行的解决方案,我更愿意使用 mod_ajp。

我刚刚改变了

ProxyPass ajp://localhost:8009/axis2/services
ProxyPassReverse ajp://localhost:8009/axis2/services

lines to

ProxyPass http://localhost:8080/axis2/services
ProxyPassReverse http://localhost:8080/axis2/services

# DefaultType: the default MIME type the server will use for a document
# if it cannot otherwise determine one, such as from filename extensions.
# If your server contains mostly text or HTML documents, "text/plain" is
# a good value.  If most of your content is binary, such as applications
# or images, you may want to use "application/octet-stream" instead to
# keep browsers from trying to display binary files as though they are
# text.
#
DefaultType None

这就是解决方案。 看看httpd.conf中的这一部分,重要的是DefalutType是None。 如果您看到纯文本/文本,这就是问题所在。 抱歉,这个解决方案不是我的,但我不知道在哪个博客中找到了它:-)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 mod_proxy 保留通过 AJP 连接器发送到 Apache 的 Tomcat HTTP 响应的 Content-Type 标头 的相关文章

随机推荐

  • Rails 格式验证——字母数字,但不是纯数字

    测试用户名格式验证的最佳方法是什么 使用字母数字的正则表达式 但不是纯数字 我一直在我的模型中使用以下验证 validates username format gt with gt a z0 9 a z0 9 a z0 9 i 数字用户名
  • 如何在 Python 中使用 ruamel.yaml 从 YAML 文件中获取注释?

    我想从使用加载的 YAML 文件中获取注释字符串ruamel yaml The 项目文件缺少 API 参考 我找不到相关示例 访问评论的正确方式是什么 import ruamel yaml yaml YAML 1 2 C1 a C2 C3
  • Python string.join ( list ) 最后一个条目带有“and”

    有什么优雅的方法可以连接句子部分列表 使结果为 a b 和 c 其中list is a b c 简单指定 join 仅实现 a b c 另外 我确实对此进行了一些搜索 但显然我没有尝试编写短语 因为除了自己枚举列表之外 我还没有想出任何东西
  • 如何在 Javascript 中提取本地图像的元数据?

    我想获取用户拖放到网页中的图像的元数据 我已经设置了拖放功能 但是 图像实际上并未上传到服务器 它是在本地访问的 我仍然可以使用 Javascript 从图像中获取元数据吗 如果是这样 我该怎么做 有哪些好的图书馆 如果没有 我是否必须上传
  • 如何从 C# 中的二维数组中删除行和列?

    如何在 C 中删除二维数组中的特定行和列 int array 1 2 3 4 5 6 7 8 9 假设我想删除第 i 行和第 i 列 跳过它们 对于 nXn 数组而不仅仅是 3x3 并将剩余的数组存储在新数组中 所以输出将是 5 6 8 9
  • 有没有办法检查两个数组是否具有相同的元素?

    假设我有 2 个数组 firstArray 1 2 3 4 5 secondArray 5 4 3 2 1 我想知道它们是否包含相同的元素 而顺序并不重要 我知道我可以编写一个函数对它们进行排序 然后循环遍历它们进行检查 但是是否有为此预先
  • 获取维恩图中的项目列表

    使用以下代码很容易绘制维恩图 library VennDiagram set seed 1 For reproducibility of results xx 1 lt list A sample LETTERS 15 B sample L
  • 通过 IP 访问 IISExpress 以获取 ASP.NET Core API

    我有一个在 IIS Express 上运行的 asp net core 项目 网址 http 本地主机 53142 and https 本地主机 44374 如果我在浏览器中输入本地主机 则可以工作 但是 如果我输入我的 IPv4 IP 地
  • mysql - 查询三个表

    我有一个包含三个表的关系数据库 第一个包含与第二个相关的 id 第二个包含与第三个相关的 id 第三个包含我想要的结果 是否可以使用单个查询来查询第一个表中的 id 该 id 给出了第三个表中与之相关的所有结果 抱歉 我是 mySQL 新手
  • CompletableFuture 和垃圾收集

    我想触发许多一次性异步 CompletableFutures 如下所示 for Job job jobs CompletableFuture supplyAsync gt job process whenComplete this doSo
  • ASMX Web 服务未序列化抽象基类

    我有一个抽象类 我们称之为生命体 它看起来像 public abstract class Lifeform public virtual int Legs get set public virtual int Arms get set pu
  • 如何在Bigcommerce中通过sku id更新产品的“inventory_level”?

    我正在尝试更新产品的库存水平 但不幸的是没有成功 这是我的代码 我想更新产品的 inventory level 但可以这样做
  • 多个远程数据库,单个本地数据库(花式复制)

    我有一个管理用户的 PouchDB 应用程序 用户拥有一个使用单个 CouchDB 数据库进行复制的本地 PouchDB 实例 很简单 这就是事情变得有点复杂的地方 我正在将 组 的概念引入到我的设计中 组将是不同的 CouchDB 数据库
  • 接口和抽象类有什么区别? [复制]

    这个问题在这里已经有答案了 可能的重复 接口与抽象类 一般 OO 我不太清楚其中的区别 Thanks 它们非常相似 但存在一些重要的技术差异 抽象类允许您为某些方法提供默认实现 但接口不允许您提供任何实现 你可以实现多个接口 但只能继承一个
  • 如何制作像谷歌地图应用程序一样的滑动面板?

    我正在寻找类似的东西Android滑动面板对于 iOS 我发现MBP下拉控制器 但它需要使用两个 ViewController 并且需要对我正在实现的应用程序的架构进行重大更改 我只想要在现有视图控制器中添加子视图的东西 我该怎么做呢 我在
  • 递归函数不返回任何内容? [复制]

    这个问题在这里已经有答案了 我编写了以下函数来实现我自己的二分搜索 def bisect input target mid len input 2 if len input 1 if input 0 target return 1 else
  • Python - 在每一行的不同位置对数组进行切片

    我有一个 2D python 数组 我想以一种奇怪的方式对其进行切片 我想要一个恒定宽度的切片 从每行的不同位置开始 如果可能的话 我想以矢量化的方式做到这一点 例如我有数组A np array range 5 range 5 看起来像 a
  • 在 Java 中,给定一个 IP 地址范围,返回覆盖该范围的 CIDR 块的最小列表

    我在将 IP 地址范围转换为 CIDR 块列表时遇到一些逻辑问题 我确实相信这个网站做得对 http ip2cidr com 我想传入一个起始 IP 地址和一个结束 IP 地址 并让 java 吐出所需的 CIDR 块的最小列表 以仅覆盖传
  • 如何防止 Cassandra 提交日志填满磁盘空间

    我正在 AWS 上运行一个两节点 Datastax AMI 集群 昨天 卡桑德拉开始拒绝一切事物的连接 系统日志没有显示任何内容 之后lot在修补过程中 我发现提交日志已填满分配的安装上的所有磁盘空间 这似乎导致连接拒绝 删除了一些提交日志
  • 如何使用 mod_proxy 保留通过 AJP 连接器发送到 Apache 的 Tomcat HTTP 响应的 Content-Type 标头

    我遇到了 HTTP 响应不正确的问题Content Type通过 AJP 1 3 连接器访问 Apache 后面的 Tomcat 中托管的 Axis2 Web 服务时 会使用此标头 我可以通过其 RESTful 接口在浏览器中毫无问题地访问