5

Javadev_appserverとライブのAppEngineサーバーの間に不整合が見つかりました。

ローカル開発サーバーには、次を返すサーブレットがあります。

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

このページにアクセスすると、ヘッダーにステータスコードメッセージが返されます。これは次のとおりです。

Status Code:400 Please log in to comment

これをAppEngineにデプロイすると問題が発生します。同じサーブレットにアクセスすると、「ログインしてコメントしてください」ではなく、「不正なリクエスト」が表示されます。

Status Code:400 Bad Request

ステータスコードメッセージはPlease log in to commentコンテンツHTMLに表示されますが、開発環境の場合のようにヘッダーには表示されません。

どうしてこれなの?

編集

curl -vvvvdev_appserverと本番の両方のトレースは次のとおりです。

dev_appserver curlトレース:

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

2 に答える 2

4

私はprodシステムが正しい実装だと思います。たとえば、javadocs sendError()

指定されたステータスを使用して、クライアントにエラー応答を送信します。サーバーはデフォルトで、指定されたメッセージを含むHTML形式のサーバーエラーページのように見える応答を作成し、コンテンツタイプを「text / html」に設定し、Cookieやその他のヘッダーを変更しないままにします。渡されたステータスコードに対応するWebアプリケーションに対してエラーページ宣言が行われた場合、提案されたmsgパラメータよりも優先して返されます。

応答がすでにコミットされている場合、このメソッドはIllegalStateExceptionをスローします。この方法を使用した後、応答はコミットされていると見なされ、書き込まれないようにする必要があります。

一部をハイライトしました。これは、可能な場合はメッセージを含むhtmlページを返すだけであることを示しています。HTTPステータスコードでそれを使用しているとは言いません(私は個人的にどこにも見たことがありません:()

于 2011-08-18T14:14:56.700 に答える
1

特に。の問題ではありませんsendErrorsetStatusメソッドは同じように動作します。通常のJavaでは、との両方sendErrorsetStatusステータスの説明を設定します。問題は、本番AppEngineサーバーが常にステータスの説明を各コードの標準の説明に設定することです。

于 2012-08-14T00:40:07.660 に答える