我遇到连接断开的问题,我认为这是由于http keepalive的行为不正确,但我无法理解' culpit'在客户端或服务器端。
我正在处理客户端发送的场景和HTTP 1.1请求:
Connection: close
并且服务器不会使用Connection标头进行回复。 行为如下:
组件如下:
根据这篇文章:" Should a server adhere to the HTTP Connection: close header sent from a client?"问题似乎是在客户端。但是,Java HttpURLCoonnection实现应该非常强大(在Linux v 1.7.0_55-b13上测试x64服务器VM,在Windows 7 v 1.7.0_75-b13上测试x64服务器)。
以下是来自客户的第一个请求的完整标题集:
GET /sap/opu/odata/SAP/ZZSALESORDER_SRV/$metadata HTTP/1.1
User-Agent: Boomi Http Transport
Authorization: Basic YmPRIVATESECRETPLEASExNg==
X-CSRF-Token: Fetch
Connection: close
Cache-Control: no-cache
Pragma: no-cache
Host: some.server.behind.firewall.local:8000
Accept: text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2
Cookie: sap-usercontext=sap-client=100; SAP_SESSIONID_DEV_100=Cm7LsDSECRETSECRETSECTERFaIMak%3d
这些是来自服务器响应的那些:
HTTP/1.1 200 OK
content-type: application/xml
content-length: 79750
x-csrf-token: oolTHISAGAINISASECRET3PA==
last-modified: Fri, 25 Mar 2016 17:55:35 GMT
dataserviceversion: 2.0
服务器回复后,客户端使用相同的连接发送第二个请求:
PUT /sap/opu/odata/SAP/ZZSALESORDER_SRV/SalesOrderItems(NumDocSap='1200001534',PosId='000020') HTTP/1.1
User-Agent: Boomi Http Transport
Content-Type: application/atom+xml
X-CSRF-Token: oolZMYSECRETPA==
Connection: close
Authorization: Basic YmPRIVATESECRETPLEASExNg==
Cache-Control: no-cache
Pragma: no-cache
Host: some.server.behind.firewall.local:8000
Accept: text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2
Content-Length: 406
Cookie: sap-usercontext=sap-client=100; SAP_SESSIONID_DEV_100=Cm7PRETTYPRIVATESECRETak%3d
并且服务器在30"之后没有回复并突然关闭连接。
设置JVM标志
可以完全解决问题http.keepAlive=false
在java客户端(Boomi),但这似乎是一种解决方法,然后是解决方案。
有人可以解释一下: