<ph type="x-smartling-placeholder"></ph>
現在、Apigee Edge のドキュメントが表示されています。
Apigee X のドキュメント。 詳細
症状
クライアント アプリケーションが HTTP ステータス コードと 400 Bad Request エラーコードを取得する
protocol.http.DuplicateHeader を API 呼び出しのレスポンスとして使用します。
エラー メッセージ
クライアント アプリケーションが次のレスポンス コードを受け取ります。
HTTP/1.1 400 Bad Request
また、次のようなエラー メッセージが表示される場合があります。
{
"fault":{
"faultstring":"Duplicate Header \"Expires\"",
"detail":{
"errorcode":"protocol.http.DuplicateHeader"
}
}
}考えられる原因
このエラーは、Apigee で重複が許可されていない特定の HTTP ヘッダーがある場合に発生します。 によって送信された HTTP リクエストの一部と同じ値または異なる値で複数回出現 Apigee Edge に送信します。
<ph type="x-smartling-placeholder"></ph>によると
RFC 7230、セクション 3.2.2: Field Order、 送信者は複数のヘッダーを生成してはなりません
メッセージ内に同じフィールド名を持つフィールドがあっても、そのフィールド値全体が
ヘッダー フィールドはカンマ区切りのリストとして定義されています(例:#(values)] または header フィールド
既知の例外です。Apigee Edge が特定のヘッダーを検出した場合、そのヘッダーには
クライアントから送信された HTTP リクエスト で複数回重複があった場合、
400 Bad Request とエラーコードを返す
protocol.http.DuplicateHeader。
このエラーには、次の原因が考えられます。
| 原因 | 説明 | トラブルシューティングの実施対象 |
|---|---|---|
| リクエスト内のヘッダーが重複しています | クライアント アプリケーションから Apigee への HTTP リクエストに、重複するヘッダーが含まれています。 | Edge Public Cloud ユーザーと Edge Private Cloud ユーザー |
共通の診断手順
このエラーを診断するには、次のいずれかのツールまたは手法を使用します。
API Monitoring
<ph type="x-smartling-placeholder">
API Monitoring を使用してエラーを診断するには:
- <ph type="x-smartling-placeholder"></ph> Apigee Edge UI にログインします。 適切なロールが割り当てられます。
問題を調査する組織に切り替えます。

- [Analyze] >API モニタリング >Investigate ページをご覧ください。
- エラーが発生した期間を選択します。
- プロキシ フィルタが [すべて] に設定されていることを確認します。 <ph type="x-smartling-placeholder">
- 障害コードを Time に対してプロットします。
障害コードが
protocol.http.DuplicateHeaderであるセルを選択してください 次のように指定します。
障害コード
protocol.http.DuplicateHeaderに関する情報は次のとおりです。 次のように表示されます。
<ph type="x-smartling-placeholder">
- [ログを表示] をクリックし、失敗したリクエストの行を開きます。
- [ログ] ウィンドウで、次の詳細をメモします。
<ph type="x-smartling-placeholder">
- </ph>
- ステータス コード:
400 - 障害の発生元:
apigee - 障害コード:
protocol.http.DuplicateHeader
- ステータス コード:
- [Fault Source] の値が
apigeeまたはMPで、[Fault Code] の値がprotocol.http.DuplicateHeaderです。これは、送信元の HTTP リクエストが クライアントで重複したヘッダーが含まれていました。
Trace ツール
<ph type="x-smartling-placeholder">NGINX
<ph type="x-smartling-placeholder">NGINX アクセスログを使用してエラーを診断するには:
- Private Cloud ユーザーの場合は、NGINX アクセスログを使用して、
HTTP
400エラーに関する重要な情報。 NGINX アクセスログを確認します。
/opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_logここで、ORG、ENV、PORT# は、 使用します。
- 特定の期間に
400エラーがないかどうかを確認( 過去に発生した問題)またはイベントで引き続き失敗するリクエストが400。 X-Apigee-fault-code で
400エラーが見つかった場合protocol.http.DuplicateHeaderの値と一致する場合、 X-Apigee-fault-source. の値を確認します。NGINX アクセスログの 400 エラーの例:
NGINX アクセスログの上記のサンプル エントリには、X-Apigee- fault-code と X-Apigee-fault-source:
レスポンス ヘッダー 値 X-Apigee-fault-code protocol.http.DuplicateHeaderX-Apigee-fault-source MP
原因: リクエスト内のヘッダーが重複している
診断
- API を使用して、観測されたエラーの障害コードと障害ソースを特定します。 Monitoring または NGINX のアクセスログについては、一般的な診断手順の説明をご覧ください。
- [Fault Source] の値が
apigeeまたはMPの場合、 は、クライアント アプリケーションから Apigee に送信されたリクエストに重複する 使用します。 リクエストの一部として複数回送信される実際のヘッダーを判別するには、 次のいずれかの方法を使用できます。
エラー メッセージ
エラー メッセージの使用
Apigee Edge から受信した完全なエラー メッセージにアクセスできる場合は、
faultstringをご覧ください。faultstringには、 ヘッダー名が返されます。エラー メッセージの例:
"faultstring":"Duplicate Header \"Expires\""
- 上記のエラー メッセージでは、ヘッダー
Expiresがfaultstringのように複数回送信されています。
実際のリクエスト
実際のリクエストの使用
クライアント アプリケーションから行われた実際のリクエストにアクセスできる場合は、 次の操作を行います。
- リクエストで渡されたヘッダーのリストを確認します。
- 特定のヘッダーが 場合、それが原因です。 表示されます。
リクエストの例:
curl https://HOST_ALIAS/duplicateheadertest -v -H "Expires: Mon, 21 June 2021 07:28:00 GMT" -H "Expires: Mon, 21 June 2021 07:28:00 GMT"
上のリクエスト例では、ヘッダー
<ph type="x-smartling-placeholder">Expiresが 1 回だけです。したがって、このリクエストは400 Bad Requestエラーで失敗し、 エラーコード:protocol.http.DuplicateHeader- または、クライアント ログにアクセスできる場合は、 Apigee Edge に対して行われた実際のリクエストに関する情報が表示され、 複数回送信される可能性があります。
解決策
重複を修正する
オプション 1 [推奨オプション] 重複したヘッダーが含まれないようにクライアント アプリケーションを修正する
<ph type="x-smartling-placeholder">- 特定のクライアントが重複ヘッダーを送信する理由を分析します。たとえば
上記のケースでは
Expires。API プロキシが受け入れても問題がないことを確認する 特定できます。一般に、HTTP 仕様では推奨されません。 RFC7230。 - これが望ましくない場合は、重複するヘッダーを送信しないようにクライアント アプリケーションを修正します。
上記の例では、ヘッダー
Expiresが送信されています。 同じ値で 2 回実行されるため、これは望ましいことではありません。この問題は、 次のように、Expiresヘッダーを 1 回だけ作成します。curl https://HOST_ALIAS/duplicateheadertest -v -H "Expires: Mon, 21 June 2021 07:28:00 GMT"
- これが望ましく、ヘッダーの重複を許可する場合は、 オプション #2 CwC プロパティを使用する
CwC
オプション #2 CwC プロパティを使用する
<ph type="x-smartling-placeholder">Apigee では、
CwC プロパティ HTTPHeader.<HeaderName> を使用すると、
重複するヘッダーを Apigee Edge の API プロキシに送信します。
| CwC プロパティ | 値 |
|---|---|
HTTPHeader.<HeaderName> |
allowDuplicates,multivalued |
たとえば、Message Processor で次のプロパティを設定して、重複と
ヘッダー Expires に複数の値が設定されている。
HTTPHeader.Expires=allowDuplicates, multiValued
- Private Cloud ユーザーは、プロパティを構成して、
リクエストがあっても Apigee Edge が
400 Bad Requestエラーを発生させない を使用して重複したヘッダーが含まれている 重複ヘッダーを使用するように Message Processor を構成するの入門ガイドを参照してください。 - Public Cloud ユーザーの場合は、Apigee Edge サポートに連絡してこのプロパティの構成を依頼してください。 できます。
仕様
Apigee では、クライアント アプリケーションがリクエストの一部として重複するヘッダーを送信しないことを想定している が次の RFC 仕様に準拠しています。
| 仕様 |
|---|
| <ph type="x-smartling-placeholder"></ph> RFC 7230、セクション 3.2.2: Field Order |
| <ph type="x-smartling-placeholder"></ph> RFC 7230、セクション 3.2 Header Fields |
Apigee サポートのサポートが必要な場合は、 診断情報の収集が必要な場合。
診断情報の収集が必要な場合
次の診断情報を収集して、Apigee Edge サポートに連絡してください。
Public Cloud ユーザーの場合は、次の情報を提供します。
- 組織名
- 環境名
- API プロキシ名
400エラーの再現に使用する完全なcurlコマンド- API リクエストのトレース ファイル
Private Cloud ユーザーの場合は、次の情報を提供します。
- 失敗したリクエストについて観測された完全なエラー メッセージ
- 環境名
- API プロキシ バンドル
400エラーを再現するために使用したcurlコマンドを完成させる- API リクエストのトレース ファイル
NGINX アクセスログ:
/opt/apigee/var/log/edge-router/nginx/ORG~ENV.PORT#_access_logここで、ORG、ENV、PORT# は、 使用します。
- Message Processor システムログ
/opt/apigee/var/log/edge-message-processor/logs/system.log