Adobe Experience Manager の一部のページにアクセスできません

一部のページにアクセスできず、次のエラーがログに表示されます。

servletengine Bad request.com.day.j2ee.servletengine.BadRequestException:リクエスト行が 8192 バイトを超えています

解決策

AEM サーバーへの HTTP メッセージのメッセージヘッダーが日常的に大きすぎる場合は、問題を解決するためにできる 2 つの方法があります。

AEM/CQ でヘッダーバッファのサイズを増やすことができます。

CQ 5.5 内のヘッダーバッファのサイズを拡大するには、Adobe から機能パック NPR-2324 を取得します。この機能パックは、Day CQSE HTTP サービス OSGi 設定にヘッダーバッファサイズフィールドを追加します。変更するフィールドはバッファリクエストサイズ(org.apache.felix.http.cqse.requestBufferSize)です。

AEM 5.6 では、機能パックは必要ありません。CQ 5.5 用の機能パックが追加する同じ設定は既に使用可能です。

サーバーは、AEM 6+ 用に変更されています。変更する設定は、Apache Felix Jetty ベースの Http サービス設定内にあります。変更するフィールドは、リクエストバッファサイズと応答バッファサイズ(org.apache.felix.http.jetty.requestBufferSize と org.apache.felix.http.jetty.responseBufferSize)です。

AEM インスタンスが JEE アプリケーションサーバー内で実行されている場合、ビルトイン Web サーバーは使用されません。アプリケーションサーバー設定内でバッファヘッダーサイズを変更します。

HTTP 仕様はメッセージヘッダーに最大制限を設定していませんが、HTTP ヘッダーバッファサイズ用に 24k を超えて必要とされる場合、別のソリューションが必要です。ヘッダーバッファのサイズが大きいほど、開いている各 HTTP ソケットに必要なメモリが増えます。これは、接続を待っているソケットを含みます。各ソケットでは、リクエストメッセージヘッダーと応答メッセージヘッダーの両方へのメモリを常時割り当てることが必要です。メッセージヘッダーのサイズを大幅に増やすと、操作のために必要となるヒープメモリ AEM の最小限の量に直接影響することになります。

要求された URL が URL 引数のサイズのために大きすぎる場合、GET ではなく POST メソッドを使用するように要求を変更します。GET リクエストのパラメーターは、メッセージヘッダーのサイズに追加されます。ただし、POST リクエストのパラメーターはメッセージコンテンツに追加されます。

cookie のサイズが原因でメッセージヘッダーが大きくなりすぎる場合は、Cookie に保存された情報を排除するか、データを別の方法で保存することを検討してください。ブラウザー Web ストレージオブジェクトは、メッセージヘッダーが増加する原因にはなりません。AEM 内のクライアントコンテキストは、時間の経過とともに大量のデータを保存する必要がでてくる可能性があります。デフォルトでは、AEM 以降のバージョンはクライアントコンテキストデータ用に Web ストレージオブジェクトを使用します。古いバージョンは cookies を使用してクライアントコンテキストデータをコミットします。データの保存方法を変更する方法についての詳細に関してはクライアントコンテキストを参照してください。

追加情報

AEM/CQ には HTTP リクエストヘッダーのコンテンツにバッファーがあります。HTTP リクエストおよび応答ヘッダーのコンテンツは、バッファー内に収まる必要があります。CQ 5.5 と AEM 5.6 内では、このバッファーのデフォルトサイズは 8k です。ヘッダーバッファーのデフォルトのサイズは AEM 6 ではさらに大きくなっています。

すべての HTTP メッセージには、メッセージヘッダーとメッセージ本文という 2 つの部分があります。

メッセージ本文には、メッセージの内容として考えられるすべての情報が含まれます。メッセージ本文の例としては、Web ページまたはイメージのバイナリの HTML テキストがあります。POST 要求を使用する HTTP メッセージの場合、メッセージ本文には POST 要求のパラメーターを含めることができます。

ヘッダーには、要求または応答に関する情報が含まれます。これには、使用された HTTP メソッドと、要求された URL が含まれます。HTTP 応答メッセージの場合、応答の HTTP ステータスも同様に含まれます。HTTP メッセージに関するその他の情報は、ヘッダフィールドと呼ばれるキーと値のペアの形式に含めることができます。ブラウザー Cookie は、メッセージヘッダー内でも同様にキーと値のペアとして送受信されます。

メッセージヘッダーは受信で評価されるためのもので、サーバーまたはブラウザーがメッセージコンテンツに作用する前に全体として処理されます。AEM は、ヘッダー全体を収容できるほどの大きさの必要があるバッファに HTTP メッセージヘッダーを読み込みます。HTTP メッセージのヘッダーコンテンツが大きすぎてバッファーに収まらない場合、メッセージは失敗します。

条件によっては HTTP メッセージヘッダーが大きくなりすぎてサーバーのバッファに収まらなくなる原因となることがあります。これらの条件のうち単独、または他の条件と重なることにより HTTP が大きすぎる原因となります。

リクエスト内の URL がバッファーに対して長すぎます。これは、例えば、リクエストに数百の URL 引数がある場合に起こる可能性があります。あるいは個々の URL 引数が非常に大きい場合にも発生することがあります。

Cookie に保存された情報は、ヘッダーがサーバーのヘッダーバッファに収まらなくなるポイントまで増加します。この問題は、多数の、より小さい cookie、あるいはより少なく、非常に大きい、Cookie により発生する可能性があります。

開発者はカスタムヘッダーフィールドを作成できます。多くの場合、シングルサインオンの実装ではカスタムヘッダーフィールドを使用します。ヘッダーフィールド内の値のサイズは HTTP 仕様に制限されていないので、開発者は、非常に豊富なコンテンツでヘッダーフィールドを作成できます。

関連トピック

HTTP メッセージ仕様
HTTP Web ストレージ仕様

本作品は Creative Commons Attribution-Noncommercial-Share Alike 3.0 Unported License によってライセンス許可を受けています。  Twitter™ および Facebook の投稿には、Creative Commons の規約内容は適用されません。

法律上の注意   |   プライバシーポリシー