HTTPリクエストパラメータ数/ヘッダ数の制限
V10.1以前のJava EE 5ではHTTPリクエストパラメータ数は特に制限されませんでしたが、V11以降のJava EE 5及びJakarta EE 8では10000個に制限されるようになりました。なお、上限値はネットワーク設定の定義項目の「HTTPリクエストパラメータ数の最大値」で変更可能です。
また、Java EE 5ではHTTPリクエストヘッダ数は特に制限されませんでしたが、Jakarta EE 8では100個に制限されるようになりました。なお、上限値はネットワーク設定の定義項目の「リクエストヘッダ数の上限値」で変更可能です。
HTTPレスポンスに設定するヘッダ数の制限
Java EE 5ではHTTPリクエストへのレスポンスに設定するヘッダ数には制限がありませんが、Jakarta EE 8では100個までに制限されるようになりました。なお、上限値はネットワーク設定の定義項目の「レスポンスヘッダ数の上限値」で変更可能です。
キープアライブのタイムアウト値
Jakarta EE 8のキープアライブのタイムアウトを設定する以下の定義項目は、キープアライブ以外のタイムアウト値としても使用されます。詳細は「HTTP接続のタイムアウト」を参照してください。
${clusterName_instanceName_configName}.network-config.protocols.protocol.${protocol-name}.http.timeout-seconds |
本定義項目は以下の3つのタイムアウトとして設定されます。
キープアライブ:Webコンテナがレスポンスを返却後、次のリクエストが来るまでの間キープアライブ接続を維持する時間
HTTPの接続:WebコンテナでHTTP接続後、リクエストがスレッドプールのキューに格納されるまで接続を維持する時間
HTTP接続キュー:Webコンテナでスレッドプールのキューに格納後、リクエストがスレッドで処理を開始されるまで接続を維持する時間
キープアライブを無効にするときは、キープアライブのタイムアウト値を変更する必要はなく、初期値のままで問題ありません。
welcome fileに該当するファイルがない場合のディレクトリー、ファイル一覧の表示
welcome fileに該当するファイルが存在しない場合のディレクトリー配下のディレクトリーやファイルの一覧の表示について、Java EE 5とJakarta EE 8とで違いがあります。
Java EE 5では、welcome file(省略時はデフォルト設定)に該当するファイルがない場合は、Interstage Web application deployment descriptor(sun-web.xml)でファイル一覧を有効にしているかによって、ステータスコード404(ファイルが存在しない)、またはその実体となるディレクトリー配下のディレクトリーやファイルの一覧が表示されます。
Jakarta EE 8では、welcome file(省略時はデフォルト設定)に該当するファイルがない場合でも、実体となるディレクトリー配下のディレクトリーやファイルの一覧は表示しません。
「コンテキストの共有」のデフォルト値
他のWebアプリケーションへのディスパッチを許可するかを定義する「コンテキストの共有(crossContextAllowed)」のデフォルト値がJava EE 5とJakarta EE 8とで異なります。
Java EE 5では、以下で設定するコンテキストの共有の値がデフォルトで無効(許可しない)となります。
Interstage Web application deployment descriptor(sun-web.xml)の<sun-web-app><property>タグ
プロパティ名:crossContextAllowed
Jakarta EE 8では、以下で設定するコンテキストの共有の値がデフォルトで有効(許可する)となります。詳細は、「glassfish-web-app」を参照してください。
GlassFish Web application deployment descriptor(glassfish-web.xml)の<glassfish-web-app><property>タグ
プロパティ名:crossContextAllowed
ServletRequest#getLocalName()メソッド
Servlet APIである「ServletRequest#getLocalName()」メソッドの復帰値について、Webサーバーと連携しない場合にJava EE 5とJakarta EE 8で違いがあります。
hostsファイルが以下のような場合、Java EE 5では、「127.0.0.1」が取得されますが、Jakarta EE 8では、「localhost」が取得されます。
127.0.0.1 localhost |
Jakarta EE 8で、IPアドレスを取得する場合は、「ServletRequest#getLocalAddr()」メソッドを利用してください。
レスポンスヘッダに指定する文字コード
Jakarta EE 8では、印字可能なASCIIコード範囲外の文字をHTTPレスポンスヘッダに設定すると、半角空白に置き換えられてクライアントに返却されるようになりました。
そのため、HTTPレスポンスヘッダにContent-Dispositionヘッダを設定することによりファイルのダウンロードを行われる場合は、レスポンスヘッダのURLエンコードが必要です。詳細は、「レスポンスヘッダに指定する文字コード」「日本語などのASCIIではないファイル名のファイルをダウンロードする場合」を参照してください。
誤りのあるWebアプリケーションの配備・起動
誤りのあるアプリケーションを配備・起動する場合、Java EE 5では配備・起動に成功しても、Jakarta EE 8では配備・起動に失敗し、Webアプリケーションにアクセスできない場合があります。出力されたメッセージを参照し、Webアプリケーションを正しく修正してください。
WEB-INF配下にXMLの文法に誤りのあるTagLibraryDescriptorファイルが存在した場合
Java EE 5は、Webアプリケーションの配備、起動は成功します。
Jakarta EE 8は、Webアプリケーションの配備に失敗、またはWebアプリケーションの起動に失敗します。
Webアプリケーション環境定義ファイルの<listener-class>タグに存在しないクラスを指定した場合
Java EE 5は、Webアプリケーションの配備、起動は成功します。アプリケーションにアクセスした場合、ステータスコード503が返却されます。
Jakarta EE 8は、Webアプリケーションの配備に失敗、またはWebアプリケーションの起動に失敗します。アプリケーションにアクセスした場合、ステータスコード404が返却されます。
HttpSessionのgetAttribute(null)呼出し
Java EE 5ではNullPointerExceptionがスローされます。
Jakarta EE 8ではnullが返却されます。
web.xmlの<security-constraint>タグ内の<auth-constraint>タグ内の<role-name>タグ
Java EE 5では、"*"を指定する場合、<security-role>タグに有効な<role-name>タグが定義されていなければリソースにアクセスできません。
Jakarta EE 8では、"*"を指定する場合、<security-role>タグに有効な<role-name>タグが定義されていなければ認証が行われません。そのため、web.xmlの<security-role>タグには有効な<role-name>タグを指定してください。
ネットワークの共有資源へアクセスする場合
ネットワークの共有資源へアクセスする場合、再度設定が必要になります。詳細は「3.1.12 ネットワークの共有資源へアクセスする場合の環境設定」を参照してください。
Webアプリケーションのdeployment descriptorに不正なエンコードを指定した場合の動作について
glassfish-web.xmlのparameter-encoding、またはweb.xml(Servlet4.0以降)のrequest-character-encodingに、Javaでサポートされていない不正なエンコードを指定した場合に、Java EE 5では、リクエストは省略値(ISO-8859-1)で処理されていました。
Jakarta EE 8では、リクエストは処理されず、Content-Length: 0 のステータスコード200(白紙のページ)が返却されます。
詳細は「13.4 Webアプリケーションの開発・運用時の異常」を参照してください。
セキュリティロールマッピングについて
ロールベースのアクセス制限を設定したアプリケーションを利用する際、GlassFish Serverのdeployment descriptor(glassfish-application.xml、glassfish-web.xml、glassfish-ejb-jar.xml)のsecurity-role-mappingタグを定義しない場合に、Java EE 5では、デフォルトロールマッピングが無効のため、GlassFish Serverのdeployment descriptorのsecurity-role-mappingタグを定義していないリソースに対するリクエストは受け付けませんでした。
Jakarta EE 8では、デフォルトロールマッピングが有効になり、デフォルトのロール(グループと同名のロール)にアクセス許可のあるリソースに対するリクエストを受け付けます。
GlassFish Serverのdeployment descriptorのsecurity-role-mappingタグについては、「3.2.1.7 GlassFish Serverのdeployment descriptorのタグの説明」を参照してください。
HTTPレスポンスのデータ形式とヘッダについて
HTTP/1.1を使用してHTTPレスポンスにデータを書き込んだときに、HTTPレスポンスの形式がチャンク化されるかどうかは、Webコンテナのバージョンによって異なります。
HTTPクライアントを設計する場合は、送信データがチャンク化されることを想定した設計にしてください。