App Engine HTTP状态代码消息

Luc*_*eis 5 java google-app-engine http-status-code-400

我发现Java dev_appserver和实时App Engine服务器之间存在不一致.

在我的本地开发服务器上,我有一个返回的Servlet:

return response.sendError(response.SC_BAD_REQUEST, "Please log in to comment");
Run Code Online (Sandbox Code Playgroud)

当我访问页面时,我在标题中返回一个状态代码消息:

Status Code:400 Please log in to comment
Run Code Online (Sandbox Code Playgroud)

将此部署到App Engine时出现问题.当访问同一个servlet时,我收到"Bad Request"而不是"Please login in comment":

Status Code:400 Bad Request
Run Code Online (Sandbox Code Playgroud)

Please log in to comment,因为它在开发环境中确实状态代码的消息出现在HTML内容,而不是在头部.

为什么是这样?

编辑

这是curl -vvvvdev_appserver和production 的跟踪:

dev_appserver curl trace:

> POST /add-comment HTTP/1.1
> User-Agent: Mozilla/4.0
> Host: localhost:8080
> Accept: */*
> Content-Length: 9
> Content-Type: application/x-www-form-urlencoded
>         
< HTTP/1.1 400 Please log in to comment
< Content-Type: text/html; charset=iso-8859-1
< Cache-Control: must-revalidate,no-cache,no-store
< Content-Length: 1406
< Server: Jetty(6.1.x)
Run Code Online (Sandbox Code Playgroud)

生产卷曲追踪:

> POST /add-comment HTTP/1.1
> User-Agent: Mozilla/4.0
> Host: www.xxx.org
> Accept: */*
> Content-Length: 9
> Content-Type: application/x-www-form-urlencoded
> 
< HTTP/1.1 400 Bad Request
< Content-Type: text/html; charset=utf-8
< Vary: Accept-Encoding
< Date: Thu, 18 Aug 2011 14:04:26 GMT
< Server: Google Frontend
< Cache-Control: private
< Transfer-Encoding: chunked
Run Code Online (Sandbox Code Playgroud)

Zei*_*ssS 4

我想说 prod 系统是正确的实现。javadocsendError()说:

使用指定的状态向客户端发送错误响应。服务器默认创建的响应看起来像包含指定消息的 HTML 格式的服务器错误页面,将内容类型设置为“text/html”,不修改 cookie 和其他标头。如果已为与传入的状态代码相对应的 Web 应用程序做出错误页面声明,则将优先于建议的 msg 参数返回该错误页面声明。

如果响应已提交,则此方法将抛出 IllegalStateException。使用此方法后,响应应被视为已提交,而不应被写入。

我突出显示了一部分。这表示它只在可能的情况下返回包含消息的 html 页面。它并没有说它在 HTTP 状态代码中使用它(我个人也没有在任何地方见过:()