使用http错误代码401对jetty的单个请求解释两次

时间:2013-06-27 10:17:16

标签: rest authentication jetty security-constraint

当我向由jetty提供服务的EJB发送GET http请求时,即使auth参数正确,我也经常得到401响应。

当我查看码头日志时,我看到了这一点:

2013-06-27 11:54:11.004:DBUG:oejs.Server:REQUEST /app/general/launch on AsyncHttpConnection@3adf0ddc,g=HttpGenerator{s=0,h=-1,b=-1,c=-1},p=HttpParser{s=-5,l=34,c=0},r=1
2013-06-27 11:54:11.021:DBUG:oejs.Server:RESPONSE /app/general/launch  401
2013-06-27 11:54:11.066:DBUG:oejs.Server:REQUEST /app/general/launch on AsyncHttpConnection@3adf0ddc,g=HttpGenerator{s=0,h=-1,b=-1,c=-1},p=HttpParser{s=-5,l=102,c=0},r=2

我怀疑请求未完全读取(请求实体太大或标头太大?) 因为它针对单个请求进行了两次解析。有办法解决这个问题吗?

HttpParser{s=-5,l=34,c=0}HttpParser{s=-5,l=102,c=0}是什么意思?

当我停用身份验证时(使用简单的jetty域的安全性约束)。请求只解析一次。

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。