我使用Restlet Framework(2.3.1)实现了REST服务。该服务接受(用户名,密码)并返回MD5身份验证字符串。 jQuery Ajax调用按如下方式执行:
$.ajax({
url: host + '/authentication',
data: { username:'aaa', password:'bbb' },
dataType: 'json' })
.done( function( data, textStatus, xhr )
{
// The server returns a JSON data object. Display it as a string
//
console.log( JSON.stringify( data ) );
// Display the authString corresponding to username and password
//
console.log( data.authString );
})
.fail( function( xhr, textStatus, errorThrown )
{
// Display error info
//
console.log( xhr.status, xhr.statusText, xhr.responseText );
});
服务器具有以下Java代码:
try
{
String md5 = MD5Converter.encryptUsernamePassword( username, password );
result = new JSONObject();
result.put( "authString", md5 );
}
catch ( AuthenticationException e )
{
setStatus( Status.CLIENT_ERROR_BAD_REQUEST);
result = new JSONObject();
result.put( "error", "Invalid username and password" );
return new JsonRepresentation( result );
}
return new JsonRepresentation( result );
如果接受用户名和密码,一切正常。但是,当返回状态代码CLIENT_ERROR_BAD_REQUEST时, 测试服务器(Windows 7,Tomcat)提供以下正确结果:
xhr.status = 400
xhr.statusText = Bad Request
xhr.responseText = {"error":"Invalid username and password"}
但是,当在生产服务器(Windows Server 2008,Tomcat)中执行相同的代码时,结果是
xhr.status = 400
xhr.statusText = Bad Request
xhr.responseText = Bad Request
生产服务器未返回{“error”:“用户名和密码无效”}。这意味着在Ajax .fail()部分中,所有信息性错误消息都将丢失,并被“错误请求”替换。
知道测试服务器和生产服务器之间出现这种不同行为的原因是什么?