あるサーバーで Tomcat 8.5 を使用し、別のサーバーで Tomcat 7 を使用しており、次の jersey リソースがあります。
@Path("main")
public class MyResource {
@POST
@Path("path")
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_JSON)
public PojoResponse sendMailTemplate(PojoRequest paramsMap) throws Exception {
return service.execute(paramsMap);
}
MyApplication
(extends ResourceConfig
)に登録するのはどれですか@ApplicationPath("root")
JMeter/Postman を使用して (/root/main/path に) リクエストを送信すると、HTTP の理由フレーズに一貫性がなくなります
クライアントは、Reason-Phrase を調べたり表示したりする必要はありません。
プロトコルに必須ではないもの
ここにリストされている理由のフレーズは単なる推奨事項です。プロトコルに影響を与えることなく、ローカルの同等のものに置き換えることができます.
Tomcat 7 サーバーから 200 OK の「有効な」応答が表示されます。
HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
Content-Type: application/json
Content-Length: 32
Tomcat 7 サーバーからの 200 200 の「無効な」応答 (同じ要求) :
HTTP/1.1 200 200
Server: Apache
Content-Type: application/json
Content-Length: 32
X-Content-Type-Options: nosniff
X-XSS-Protection: 1
Connection: close
Strict-Transport-Security: max-age=31536000; includeSubDomains; preload
応答を確認すると、理由フレーズの更新に関する参照が見つかりません。この不一致は無視する必要がありますか、それとも修正できますか?
編集
私のアプリケーションは、JacksonFeature も登録します。
register(JacksonFeature.class);
編集2
実際、2 番目の環境に余分な jar があることがわかりました。
jersey-entity-filtering-2.19
一般的な瓶:
jersey-client-2.19.jar
jersey-common-2.19.jar
jersey-container-servlet-2.19.jar
jersey-container-servlet-core-2.19.jar
jersey-guava-2.19.jar
jersey-media-jaxb-2.19.jar
jersey-media-json-jackson-2.6.jar
jersey-server-2.19.jar
jersey-spring3-2.6.jar
編集3
Tomcat 8.5 で理由フレーズが削除されたというバグを見つけました
Christopher Schultz : Tomcat が積極的に理由句を取り除いているのを見て驚きました。私は当初、Tomcat によって生成されたすべての応答 (たとえば、DefaultServlet からのすべてのもの、さまざまな内部エラーなど) から理由句を単純に削除していると考えていましたが、アプリケーションによって明示的に設定された理由句を積極的に削除しています。
Michael Osipov: いいえ、理由のフレーズは送信されません。HTML エラー ページのみ。前回 ErrorReportValve を書き直したのでわかります。
編集4
関連する質問を見つけましたが、完全には理解できませんでした
Tomcat 8.5 では、応答から「HTTP ステータス理由フレーズ」が削除されたため、応答で HTTP 200 OK ではなく HTTP 200 が返されます。ステータス コードをステータス理由フレーズに複製して表示するソフトウェアからの観察結果である可能性があります。
ステータスコードをどのように観察していますか? プロトコル トレースを実行すると、Tomcat / httpd から送信されるステータス コードが 1 つしかないことがわかる場合があります。「ダブル ステータス コード」は、実際には (通常の) ステータス コードではなく、たまたまステータス コードと同じテキストである理由フレーズではないですか?