CXF 不满足客户端的保持活动请求



我的客户端正在发送:

POST /xxx/yyy HTTP/1.1
Host: localhost:9009
User-Agent: gSOAP/2.8
Content-Type: text/xml; charset=utf-8
Content-Length: 2442
Connection: keep-alive
SOAPAction: ""

但服务器回复:

HTTP/1.1 200 OK
Content-Type: text/xml;charset=UTF-8
Content-Length: 11182
Server: Jetty(8.1.14.v20131031)

服务器不应该也返回"连接:保持活动"吗
我看到之后客户端关闭了连接,尽管它被配置为保持连接打开
我认为这是因为服务器没有在回复中提供keep-alive(这是RFC吗?)。

在我的案例中,gSoap关闭连接的原因与服务器返回的HTTP标头无关,而是需要通过调用在两个方向上指定保持活动标志

    soap_set_imode(this, SOAP_IO_KEEPALIVE);
    soap_set_omode(this, SOAP_IO_KEEPALIVE);

根据我在HTTP1.1中所读到的内容,持久连接是默认的,所以如果服务器没有返回"Connection:close",连接也可以用于下一个请求。

如果要发送到的服务器没有请求保持活动,那么CXF(实际上是CXF使用的Java类)将保持连接打开5秒钟。在Java 19之前的Java版本中不能修改此行为。在Java 19中,添加了一个新设置,允许您在服务器未指定的情况下设置保持活动超时。要将保持活动时间设置为1分钟,您可以这样做(仅在Java 19及更高版本中):

    System.setProperty("http.keepAlive.time.server", "60");

最新更新