有没有办法在ESB(< 5.0.0)或API Manager(< 2.0.0)上切换有效负载压缩,特别是对于application / json内容类型?
我在资源层面实现了这一目标,但显然全局选择是理想的。
经过一些研究后,我在catalina-server.xml中找到了以下可用选项:
compression =“on”& compressableMimeType。
这没有用,因为tomcat服务于web2接口,而不是服务,这就是axis2的用途。
经过一番挖掘后,我找到了一篇存档的文章http://wso2.com/library/3316/。在里面它引用了以下内容:
“MC_GZIP_RESPONSE(Server,Writable):默认情况下,不会压缩HTTP响应正文。将此消息上下文属性设置为true,以使响应正文被GZIP压缩。”
听起来它正是我所需要的,但我不确定在何处设置此参数。
答案 0 :(得分:3)
谢谢" ycr"。你让我走上了正确的道路。
我为实现这一目的所做的是为API管理器内部署的api创建全局自定义inSequence和outSequence(全局扩展),如https://docs.wso2.com/display/AM1100/Adding+Mediation+Extensions中所述。
inSequence检查请求的Accept-Encoding标头的值/是否存在,outSequence相应地gzips响应。
步骤:
创建" inSequence" handler xml文件:
<sequence xmlns="http://ws.apache.org/ns/synapse" name="WSO2AM--Ext--In">
<property name="encoding" expression="$trp:Accept-Encoding"/>
<filter xpath="fn:contains(fn:lower-case(get-property('encoding')) , 'gzip')">
<then>
<property name="compression" value="true"/>
</then>
<else>
<property name="compression" value="false"/>
</else>
</filter>
文件名可以是任何东西,但标签内的名称必须是WSO2AM - Ext - In
同样创建&#34; outSequence&#34;档案:
<sequence xmlns="http://ws.apache.org/ns/synapse" name="WSO2AM--Ext--Out">
<filter source="get-property('compression')" regex="true">
<then>
<property action="remove" name="TRANSPORT_HEADERS" scope="axis2"/>
<property name="Content-Encoding" scope="transport" type="STRING" value="gzip"/>
<property name="Transfer-Encoding" scope="transport" type="STRING" value="gzip"/>
</then>
<else>
<property name="TRANSPORT_HEADERS" action="remove" scope="axis2"/>
</else>
</filter>
复制/ repository / deployment / server / synapse-configs / default / sequences目录中的文件。它们将被热部署。
向任何已部署的api发送请求,并将头文件Accept-Encoding设置为gzip(其中包含gzip的任何字符串将被压缩),它应该使用Content-Encoding响应:gzip
答案 1 :(得分:1)
在Api Manager中您可以将此属性添加到velocity_template.xml,因此默认情况下会将其添加到正在创建的所有API中。