Java 响应时Apache HttpClient头出现问题

Java 响应时Apache HttpClient头出现问题,java,com.sun.net.httpserver,apache-httpclient-4.x,Java,Com.sun.net.httpserver,Apache Httpclient 4.x,我将Apache HttpClient与java.sun.net.httpserver一起用作服务器。服务器处理Http Get请求。在开始时,服务器使用set cookie头设置会话cookie,apache httpclient(根据日志)接受该cookie,但问题是客户端从未存储cookie,也从未将其发送回服务器。 我已经用一些网络浏览器测试了服务器应用程序,一切正常。因此,问题似乎出在客户端,特别是考虑到这样一个事实,即所有cookie都是根据log4j记录的 DEBUG [org.a

我将Apache HttpClient与java.sun.net.httpserver一起用作服务器。服务器处理Http Get请求。在开始时,服务器使用set cookie头设置会话cookie,apache httpclient(根据日志)接受该cookie,但问题是客户端从未存储cookie,也从未将其发送回服务器。 我已经用一些网络浏览器测试了服务器应用程序,一切正常。因此,问题似乎出在客户端,特别是考虑到这样一个事实,即所有cookie都是根据log4j记录的

DEBUG [org.apache.http.impl.conn.SingleClientConnManager] Get connection for route HttpRoute[{}->http://localhost]
DEBUG [org.apache.http.impl.conn.DefaultClientConnectionOperator] Connecting to localhost/127.0.0.1:80
DEBUG [org.apache.http.client.protocol.RequestAddCookies] CookieSpec selected: best-match
DEBUG [org.apache.http.client.protocol.RequestAuthCache] Auth cache not set in the context
DEBUG [org.apache.http.impl.client.DefaultHttpClient] Attempt 1 to execute request
DEBUG [org.apache.http.impl.conn.DefaultClientConnection] Sending request: GET /login?pass=2Gi/Kzj9 HTTP/1.1
DEBUG [org.apache.http.headers] >> GET /login?pass=2Gi/Kzj9 HTTP/1.1
DEBUG [org.apache.http.headers] >> Host: localhost
DEBUG [org.apache.http.headers] >> Connection: Keep-Alive
DEBUG [org.apache.http.headers] >> User-Agent: Apache-HttpClient/4.1.1 (java 1.5)
DEBUG [org.apache.http.impl.conn.DefaultClientConnection] Receiving response: HTTP/1.1 200 OK
DEBUG [org.apache.http.headers] << HTTP/1.1 200 OK
DEBUG [org.apache.http.headers] << Transfer-encoding: chunked
DEBUG [org.apache.http.headers] << Content-type: text/html
DEBUG [org.apache.http.headers] << Set-cookie: SESSID=0.6092204529970631; expires=Tue, 19-4-11 18:28:43 GMT; Max-Age=3600; Path=/; Version="1"
DEBUG [org.apache.http.client.protocol.ResponseProcessCookies] Cookie accepted: "[version: 0][name: SESSID][value: 0.6092204529970631][domain: localhost][path: /][expiry: Sun Apr 19 19:28:43 CET 11]". 
DEBUG [org.apache.http.impl.client.DefaultHttpClient] Connection can be kept alive indefinitely
DEBUG [org.apache.http.impl.conn.SingleClientConnManager] Releasing connection org.apache.http.impl.conn.SingleClientConnManager$ConnAdapter@1bd0dd4
DEBUG [org.apache.http.impl.conn.SingleClientConnManager] Get connection for route HttpRoute[{}->http://localhost]
DEBUG [org.apache.http.impl.client.DefaultHttpClient] Stale connection check
DEBUG [org.apache.http.client.protocol.RequestAddCookies] CookieSpec selected: best-match
DEBUG [org.apache.http.client.protocol.RequestAuthCache] Auth cache not set in the context
DEBUG [org.apache.http.impl.client.DefaultHttpClient] Attempt 1 to execute request
DEBUG [org.apache.http.impl.conn.DefaultClientConnection] Sending request: GET /newnode?node=/tp HTTP/1.1
DEBUG [org.apache.http.headers] >> GET /newnode?node=/tp HTTP/1.1
DEBUG [org.apache.http.headers] >> Host: localhost
DEBUG [org.apache.http.headers] >> Connection: Keep-Alive
DEBUG [org.apache.http.headers] >> User-Agent: Apache-HttpClient/4.1.1 (java 1.5)
DEBUG [org.apache.http.impl.conn.DefaultClientConnection] Receiving response: HTTP/1.1 200 OK
DEBUG [org.apache.http.headers] << HTTP/1.1 200 OK
DEBUG [org.apache.http.headers] << Transfer-encoding: chunked
DEBUG [org.apache.http.headers] << Content-type: text/html
DEBUG [org.apache.http.headers] << Set-cookie: SESSID=0.9499481656989606; expires=Tue, 19-4-11 18:28:43 GMT; Max-Age=3600; Path=/; Version="1"
DEBUG [org.apache.http.client.protocol.ResponseProcessCookies] Cookie accepted: "[version: 0][name: SESSID][value: 0.9499481656989606][domain: localhost][path: /][expiry: Sun Apr 19 19:28:43 CET 11]". 
DEBUG [org.apache.http.impl.client.DefaultHttpClient] Connection can be kept alive indefinitely
DEBUG [org.apache.http.impl.conn.SingleClientConnManager] Releasing connection org.apache.http.impl.conn.SingleClientConnManager$ConnAdapter@b5f53a
DEBUG[org.apache.http.impl.conn.SingleClientConnManager]获取路由HttpRoute[{}->http://localhost]
调试[org.apache.http.impl.conn.DefaultClientConnectionOperator]连接到本地主机/127.0.0.1:80
DEBUG[org.apache.http.client.protocol.RequestAddCookies]CookieSpec已选择:最佳匹配
调试[org.apache.http.client.protocol.RequestAuthCache]未在上下文中设置身份验证缓存
调试[org.apache.http.impl.client.DefaultHttpClient]尝试1执行请求
调试[org.apache.http.impl.conn.DefaultClientConnection]发送请求:GET/login?pass=2Gi/Kzj9 http/1.1
调试[org.apache.http.headers]>>GET/login?pass=2Gi/Kzj9 http/1.1
调试[org.apache.http.headers]>>主机:localhost
调试[org.apache.http.headers]>>连接:保持活动状态
调试[org.apache.http.headers]>>用户代理:ApacheHttpClient/4.1.1(Java1.5)
调试[org.apache.http.impl.conn.DefaultClientConnection]接收响应:http/1.1 200 OK
调试[org.apache.http.headers]>Host:localhost
调试[org.apache.http.headers]>>连接:保持活动状态
调试[org.apache.http.headers]>>用户代理:ApacheHttpClient/4.1.1(Java1.5)
调试[org.apache.http.impl.conn.DefaultClientConnection]接收响应:http/1.1 200 OK
调试[org.apache.http.headers]
cookie值存在多个问题:

(1) 它违反了RFC 2109和RFC 2965规范,使用了带有逗号的属性值,但没有用引号将其括起来

(2) 到期属性看起来可疑。我怀疑失效日期设置不正确,cookie在被接受的同一时刻失效。此外,版本1 cookies(RFC2109/RFC2965兼容)甚至不应该首先使用它

cookie还具有
Max Age
属性,新的cookie应该使用,但是由于cookie的格式不正确,HttpClient将cookie视为旧的Netscape样式的cookie,并且
expiration
属性优先于
Max Age

cookie值存在多个问题:

(1) 它违反了RFC 2109和RFC 2965规范,使用了带有逗号的属性值,但没有用引号将其括起来

(2) 到期属性看起来可疑。我怀疑失效日期设置不正确,cookie在被接受的同一时刻失效。此外,版本1 cookies(RFC2109/RFC2965兼容)甚至不应该首先使用它


cookie还具有
Max Age
属性,新的cookie应该使用,但是由于cookie的格式不正确,HttpClient将cookie视为旧的Netscape样式的cookie,并且
Expiry
属性优先于
Max Age

您是否阅读了所有关于HTTP状态管理的HttpClient教程?该链接有望解释在HttpClient中使用cookie所需的一切。您是否阅读了所有关于HTTP状态管理的HttpClient教程?该链接有望解释在HttpClient中使用cookie所需的一切。
Set-cookie: SESSID=0.9499481656989606; expires=Tue, 19-4-11 18:28:43 GMT; Max-Age=3600; Path=/; Version="1"