Flex Gateway新着情報
Governance新着情報
Monitoring API ManagerAnypoint Connector for HTTP (HTTP Connector) をトラブルシューティングするには、ワイヤーロギングおよび TLS デバッグを有効にして、Host
ヘッダーおよび HTTP エンコーディングを適切に使用するようにして、よくスローされるメッセージについて理解しておきます。
ワイヤーロギングを有効にしてアプリケーションのパフォーマンスのトラブルシューティングを行うと、アプリケーションワークフローの実際の未加工 HTTP 要求および応答がログに記録されます。その後、そのログを使用して現在の設定を検証するか、HTTP Connector の動作を他のクライアントやサーバーと比較します。
HTTP ワイヤーロギングを有効化する手順は、次のとおりです。
Anypoint Studio にアクセスし、[Package Explorer] ビューに移動します。
アプリケーションのプロジェクトを開きます。
src/main/resources
パスフォルダーを開きます。
フォルダー内の log4j2.xml
ファイルを開きます。
次の行がすでに log4j2.xml
ファイル内にある場合は、そのコメントを解除して有効にします。それ以外の場合、次の行を追加します。
<?xml version="1.0" encoding="utf-8"?>
<Configuration>
...
<Loggers>
...
<!-- Http Logger shows wire traffic on DEBUG. -->
<AsyncLogger name="org.mule.service.http.impl.service.HttpMessageLogger" level="DEBUG"/>
...
</Loggers>
</Configuration>
変更を保存します。
Package Explorer でプロジェクト名をクリックし、[Run (実行)] > [Run As (別のユーザーとして実行)] > [Mule Application (Mule アプリケーション)] をクリックします。
TLS デバッグを有効にして SSL 障害のトラブルシューティングを行うと、接続試行、ハンドシェイク、ネゴシエーションなどの SSL 関連のデータがログに記録されます。
その後、そのログを使用して、正しい証明書が揃っているか、なぜ暗号化やプロトコルの不一致が起きているのか、なぜ接続が失敗するのかなどを判断します。
TLS デバッグを有効にするには、システムプロパティ -Djavax.net.debug=ssl
を設定します。
HTTP クライアントでは、Host
ヘッダーを使用して要求されたリソースのホストとポート番号を示します。HTTP Connector の Request 操作では、設定されたホストとポートを考慮するこの必須のヘッダーを自動生成します。ただし、サーバーではポート情報を省略可能とみなすことが多くあり、ポート情報が含まれる要求を受信するとエラーになります。
こうしたエラーはサーバーオーナーに報告して修正を依頼してください。修正されるまでの間は、ポート情報を含めずに Host
ヘッダーを出力するように Request 操作を手動で変更して、この問題を回避してください。
次の例は、Host: somehost.com
ヘッダーを送信する <http:headers>
設定を示しています。
<flow name="connectingToFaultyServer">
<http:request method="GET" url="http://somehost.com:8081/api/v3/someresource">
<http:headers>
#[{"Host" : "somehost.com"}]
</http:headers>
</http:request>
<logger level="INFO"
message="#['Received a ' ++ attributes.status code ++ ' response with body: {' ++ payload ++ '}']"/>
</flow>
明示的なヘッダー設定がないと、自動生成された Host: somehost.com:8081
が送信されます。
ストリーミングされたデータを処理する時のパフォーマンスを向上させるために、HTTP Connector では送信するデータのサイズが不明な場合に Transfer-Encoding: chunked
エンコードを使用して要求および応答を送信します。ただし、HTTP クライアントおよびサーバーがこうしたデータを受信する準備ができていない場合があります。
こうしたエラーはサーバーオーナーまたはクライアント所有者に報告して修正を依頼してください。修正されるまでの間は、Content-Length
でエンコードされた本文を出力するように Listener 操作および Request 操作を手動で変更して、この問題を回避してください。
次の例は、Content-Length
エンコードを使用することを示す responseStreamingMode
NEVER
を使用して設定された HTTP の Listener 操作を示しています。
<flow name="main-contact-read">
<http:listener path="account/{accountId}/main-contact" allowedMethods="GET" responseStreamingMode="NEVER" config-ref="HTTP_Listener_config"/>
<!-- fetch main contact for accountId -->
</flow>
次の例は、Content-Length
エンコードを使用するために requestStreamingMode
NEVER
を使用して設定された HTTP の Requester 操作を示しています。
<flow name="connectingToFaultyServer">
<http:request method="GET" url="http://somehost.com:8081/api/v3/someresource" requestStreamingMode="NEVER"/>
<logger level="INFO"
message="#['Received a ' ++ attributes.status code ++ ' response with body: {' ++ payload ++ '}']"/>
</flow>
ここでは、一般的なスローメッセージとその解決方法を示します。
HTTP:BAD_REQUEST
たとえばヘッダーサイズが最大値を超えている場合に、構文が無効であるためサーバーが要求を理解できません。
HTTP:CLIENT_SECURITY
外部エンティティによって適用されたセキュリティの問題が発生しました。
HTTP:CONNECTIVITY
A problem occurred and a connection could not be established. (問題が発生して接続を確立できませんでした。)
HTTP:FORBIDDEN
クライアントにコンテンツへのアクセス権がないため、サーバーが要求されたリソースの提供を拒否しています。
HTTP:INTERNAL_SERVER_ERROR
サーバーで要求を満たせない状況が発生しました。
HTTP:METHOD_NOT_ALLOWED
サーバーの要求メソッドが対象リソースでサポートされていません。
HTTP:NOT_ACCEPTABLE
サーバーが要求のプロアクティブコンテンツネゴシエーションヘッダーで定義された許容可能な値のリストに一致する応答を生成できません。
HTTP:NOT_FOUND
The server could not find the requested resource. (サーバーは要求されたリソースを見つけることができませんでした。)
HTTP:PARSING
[非推奨ですが、互換性を確保するために保持されています。] 解析メカニズムが削除されました。
HTTP:RETRY_EXHAUSTED
The maximum number of retries for the operation is reached. (操作の最大試行回数に達しました。)
HTTP:SECURITY
リクエスター認証に失敗しました。
HTTP:SERVICE_UNAVAILABLE
サーバーはメンテナンスまたは過負荷のためにダウンしているため、要求を管理できません。
HTTP:TIMEOUT
http:requester によって送信された要求がタイムアウトになりました。
HTTP:TOO_MANY_REQUESTS
特定の期間内に送信された要求が多すぎます。
HTTP:UNAUTHORIZED
要求された応答を取得するための認証に失敗したか、認証がまだ提供されていません。
HTTP:UNSUPPORTED_MEDIA_TYPE
サーバーで要求されたデータのメディア形式がサポートされていません。
HTTP:BAD_GATEWAY
要求を管理するためにゲートウェイまたはプロキシとして機能するサーバーが無効な応答を受信しました。
HTTP:GATEWAY_TIMEOUT
要求を管理するためにゲートウェイまたはプロキシとして機能するサーバーが指定された時間内に応答を受信しませんでした。
HTTP:BASIC_AUTHENTICATION
HTTP の *Request* 操作でサービスに要求を送信するための基本認証がないか、指定されたログイン情報が正しくありません。