我们遇到一个问题,当Content-Length超过1068时,对WSO2 API REST端点的调用失败并显示“412 Precondition Failed”。只需向请求添加空格(将大小增加到1069)会导致此失败。如果API调用足够快(使用SOAPUI进行测试),则当内容长度小于1069时也会发生此问题。我们有一个理论认为标头和主体在数据包之间分开并混淆了请求。我们尝试关闭分块,这并没有影响事情。直接调用后端REST服务时,它可以正常工作。
答案 0 :(得分:0)
如果要调用SOAP端点,可以使用属性介体关闭如下的分块。但是你必须确保SOAP端点也期望一个非分块的请求。
<property name=”DISABLE_CHUNKING” value=”true” scope=”axis2″/>
但是,如果您使用REST端点上面的属性有时可能无法正常工作。在这种情况下,我们需要确保将 Content-Length 标头附加到请求中。我们可以使用以下两个属性来附加 Content-Length 标题。
<property name="FORCE_HTTP_CONTENT_LENGTH" value="true" scope="axis2"></property>
<property name="COPY_CONTENT_LENGTH_FROM_INCOMING" value="true" scope="axis2"></property>
示例代理inSequence
<inSequence>
<log level="custom">
<property name="msg" value="Executing IN sequence"></property>
</log>
<property name="FORCE_HTTP_CONTENT_LENGTH" value="true" scope="axis2"></property>
<property name="COPY_CONTENT_LENGTH_FROM_INCOMING" value="true" scope="axis2"></property>
<send>
<endpoint>
<address uri="https://www.google.com" format="rest"></address>
</endpoint>
</send>
</inSequence>