Jetty - Authentification HTTP - 双重请求

时间:2013-06-27 11:00:29

标签: java web-services http jetty http-status-code-401

对于REST Web服务,我们设置了Jetty HTTP身份验证。

问题是每次通过身份验证发送的请求都会执行2次,然后会启动一次

在每种情况下,第一个响应是HTTP 401返回,然后再次运行查询...

如果我禁用身份验证,我就没有这个问题。

是否可以避免这种双重通话?更重要的是,如何?

这是我的日志:

  

2013-06-27 12:10:43.618:DBUG:oejs.Server:在AsyncHttpConnection @ 764904bd上的REQUEST / project / config / loadTable,g = HttpGenerator {s = 0,h = -1,b = -1, C = -1},p = {HttpParser S = -5,L = 3,C = 0},R = 2

     

2013-06-27 12:10:43.620:DBUG:oejs.Server:RESPONSE / project / config / loadTable 401

     

2013-06-27 12:10:43.760:DBUG:oeji.nio:destroyEndPoint SCEP @ 23b9b99d {l(null)< - > r(0.0.0.0/0.0.0.0:12888),d = false开放= false时,ISHUT = TRUE,oshut = TRUE,RB =假,WB =假,W = TRUE,I = 1} - {      

2013-06-27 12:10:43.971:DBUG:oeji.nio:创建了SCEP @ 2aa9bd1d {l(/193.248.145.16:52210)< - > r(/195.160.188.114: 12888),d =假,开放=真,ISHUT =假,oshut =假,RB =假,WB =假,W =真,I = 0} - {AsyncHttpConnection @ 6dbed0cc,G = HttpGenerator {S = 0,H = -1,b = -1,C = -1},p = {HttpParser S = -14,L = 0,C = 0},R = 0}

     

2013-06-27 12:10:43.988:DBUG:oejs.Server:在AsyncHttpConnection @ 6dbed0cc上的REQUEST / project / config / loadTable,g = HttpGenerator {s = 0,h = -1,b = -1, C = -1},p = HttpParser {S = -5,L = 43,C = 0},R = 1

     

2013-06-27 12:10:43.991:DBUG:jndi:InitialContextFactory.getInitialContext()

     

2013-06-27 12:10:43.991:DBUG:jndi:为本地命名空间创建初始上下文委托:org.eclipse.jetty.jndi.local.localContextRoot@3abdae7

     

2013-06-27 12:10:43.992:DBUG:jndi:查找name =“jdbc / project”

     

2013-06-27 12:10:43.992:DBUG:jndi:查找姓名=“项目”

     

2013-06-27 12:10:44.007:DBUG:jndi:InitialContextFactory.getInitialContext()

     

2013-06-27 12:10:44.007:DBUG:jndi:为本地命名空间创建初始上下文委托:org.eclipse.jetty.jndi.local.localContextRoot@53408c0d

     

2013-06-27 12:10:44.008:DBUG:jndi:查找name =“jdbc / project”

     

2013-06-27 12:10:44.008:DBUG:jndi:查找姓名=“项目”

     

2013-06-27 12:10:44.029:DBUG:jndi:InitialContextFactory.getInitialContext()

     

2013-06-27 12:10:44.029:DBUG:jndi:为本地命名空间创建初始上下文委托:org.eclipse.jetty.jndi.local.localContextRoot@591a00b1

     

2013-06-27 12:10:44.029:DBUG:jndi:查找name =“jdbc / project”

     

2013-06-27 12:10:44.030:DBUG:jndi:查找姓名=“项目”

     

2013-06-27 12:10:44.314:DBUG:oejs.Server:RESPONSE / project / config / loadTable 200

谢谢

1 个答案:

答案 0 :(得分:0)

401表示服务器需要客户端未发送的身份验证凭据或客户端发送的身份验证凭据未经授权。如果某些客户端实现收到包含凭据的401,则会重新发送该请求。如果您的客户端正在这样做,那就可以解释为什么您在服务器上收到两次请求。

HttpParser toString()方法返回HttpParser的当前状态。这是代码:

return String.format("%s{s=%d,l=%d,c=%d}",
        getClass().getSimpleName(),
        _state,
        _length,
        _contentLength);

所以s是州。 -5是STATE_HEADER。 l和c代表长度和contentLength。