【问题标题】:App Engine HTTP Status Code messageApp Engine HTTP 状态码消息
【发布时间】:2011-08-17 14:52:30
【问题描述】:

我发现 Java 的 dev_appserver 与实时 App Engine 服务器之间存在不一致。

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

return response.sendError(response.SC_BAD_REQUEST, "Please log in to comment");

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

Status Code:400 Please log in to comment

当我将它部署到 App Engine 时,问题就出现了。访问同一个 servlet 时,我收到此“错误请求”而不是“请登录以发表评论”:

Status Code:400 Bad Request

Please log in to comment 状态代码消息出现在内容 HTML 中,但不像在开发环境中那样出现在标题中。

这是为什么?

编辑

这是 dev_appserver 和生产的 curl -vvvv 跟踪:

dev_appserver 卷曲跟踪:

> 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)

生产卷曲痕迹:

> 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

【问题讨论】:

  • 你能为 devappserver 和 production 这两个调用添加 curl -vvvv 跟踪吗?

标签: java google-app-engine http-status-code-400


【解决方案1】:

我会说 prod 系统是正确的实现。 sendError() 的 javadocs 说:

使用指定状态向客户端发送错误响应。 该 服务器默认创建响应看起来像 包含指定消息的 HTML 格式的服务器错误页面, 将内容类型设置为“text/html”,留下cookies和其他 标题未修改。如果已为 传入的状态码对应的web应用,会是 优先于建议的 msg 参数返回。

如果响应已经提交,这个方法会抛出一个 非法状态异常。使用此方法后,响应应该是 被视为已提交,不应写入。

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

【讨论】:

  • 有趣。看来你是对的。没有任何关于状态代码消息的说明。 Jetty (dev_appserver) 似乎将其显示为 HTTP 状态消息,但其他人可能不会。我想知道是否有办法在 App Engine 环境中强制它 - 我想能够在标题中设置自己的状态消息应该是人们可以做的事情。
【解决方案2】:

这不是sendError 的具体问题。 setStatus 方法的行为方式相同。在普通 Java 下,sendErrorsetStatus 都设置状态描述。问题是生产 App Engine 服务器总是将状态描述设置为每个代码的标准描述。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-23
    • 1970-01-01
    • 2011-12-21
    • 1970-01-01
    相关资源
    最近更新 更多