ヘッダーの重複を許可するように Message Processor を構成する

<ph type="x-smartling-placeholder"></ph> 現在、Apigee Edge のドキュメントが表示されています。
Apigee X のドキュメント
詳細

<ph type="x-smartling-placeholder">

HTTP 仕様に従う <ph type="x-smartling-placeholder"></ph> RFC 7230、セクション 3.2.2: Field Order に基づき、Apigee Edge は、 クライアントまたはバックエンド サーバーからの HTTP レスポンスに、渡される同じヘッダーが含まれていない 例外がない限り、同じまたは異なる値で複数回 重複が許容されます

デフォルトでは、Apigee Edge では、ほとんどの HTTP インスタンスに重複や複数の値を渡すことができます。 使用します。ただし、 重複や複数の値を指定できるヘッダー。 したがって、次のようになります。

  • 400 Bad Request とエラーコードが表示されます クライアントが特定の HTTP リクエストを送信する場合は protocol.http.DuplicateHeader HTTP ヘッダーに複数の値が設定されていること。 Apigee Edge で重複/複数の値が存在する場合があります。
  • 同様に、502 Bad Gateway とエラーコードが表示されます。 バックエンド サーバーが HTTP レスポンスを送信する場合は protocol.http.DuplicateHeader 含まれていない HTTP ヘッダーに複数の値が設定されていると、 Apigee Edge で重複または複数の値を持つことが許可される

これらのエラーに対処するために推奨される解決策は、クライアント アプリケーションを修正することです。 バックエンド サーバーが重複したヘッダーを送信しないようにして、仕様に準拠するようにします。 <ph type="x-smartling-placeholder"></ph> RFC 7230、セクション 3.2.2: Field Order(次のトラブルシューティング ハンドブックで説明されているとおり)。

ただし、重複や複数のエンティティを含めるために例外を追加したい場合もあります。 値を使用します。そのような状況では、重複したヘッダーと、複数の 特定の HTTP ヘッダーの値として、次のようにプロパティ HTTPHeader.HEADER_NAME を設定します。 スケーリングできます

このドキュメントでは、このプロパティに関する情報と、このプロパティを有効にして以下を有効にする方法について説明します。 前述のエラーを回避し、同様のベスト プラクティスを紹介します。

重複と複数の値を許可する HTTP ヘッダー プロパティ

Apigee Edge には、API 呼び出しの動作を制御する次の 2 つのプロパティがあります。 HTTP ヘッダーに複数の値が含まれていますこれらの設定は、 Message Processor で次のトークン構文を使用する Edge の構成方法

プロパティ名 説明 使用できる値
HTTPHeader.ANY

このプロパティは、すべての HTTP で重複または複数の値を許可するかどうかを示します。 クライアントまたは HTTP リクエストの一部として送信されるカスタム ヘッダーを含むヘッダー Apigee Edge に送信されます。

デフォルト値:

multivalued, allowDuplicate,

<ph type="x-smartling-placeholder">
  1. blank: HTTP ヘッダーの重複や複数の値は許可されません。
  2. multiValued: 複数の値を持つヘッダーを複数のヘッダーに分割します。 HTTP ヘッダーには複数の値を指定できますが、重複は指定できません。 値 multiValued は有効です。これは、test-header=a,b を意味します。 test-header=atest-header=b. に変換されます。
  3. allowDuplicate: 同じ名前の複数の(重複した)HTTP ヘッダーを許可します。
  4. multivalued, allowDuplicate: 複数の値と重複の両方 HTTP ヘッダーで許可されるようにします。

HTTPHeader.HEADER_NAME

このプロパティは、特定のヘッダーの動作を、現在設定されているもの HTTPHeader.ANY によって指定

<ph type="x-smartling-placeholder">
同上。

重複や複数の値を持つことができないヘッダー

前述のように、Apigee Edge では、ほとんどの HTTP イベントに対して重複や複数の値が許容されます。 使用されます。これは、プロパティ HTTPHeader.ANY が 値 multivalued, allowDuplicate. が構成されています

設定が上書きされました

一部のヘッダーでは、次のいずれかを使用してデフォルト構成が上書きされます。 メソッド:

  • HTTPHeader.HEADER_NAME=multivalued, allowDuplicate

    この設定では、デフォルトの動作は変更されません。 つまり、特定のヘッダーは重複や複数の値を持つことができます

    .
  • HTTPHeader.HEADER_NAME=

    この設定により、デフォルトの動作が変更されます。つまり、 ヘッダーに重複や複数の値を指定することはできません

で確認できます。 <ph type="x-smartling-placeholder">

重複や複数の値を含めることが許可されないヘッダーの特定

このセクションでは、次の項目を特定する方法について説明します。

  • 重複や複数の値を含めることが許可されない 具体的なヘッダー Apigee Edge Private Cloud の設定
  • 特定のヘッダーと既存の構成
  1. Message Processor マシンで、環境変数 HTTPHeader. を検索します。 次のように /opt/apigee/edge-message-processor/conf ディレクトリを作成します。

    grep -ri "HTTPHeader." /opt/apigee/edge-message-processor/conf
    

    出力例:

    # grep -ri "HTTPHeader" /opt/apigee/edge-message-processor/conf
    /opt/apigee/edge-message-processor/conf/http.properties:HTTPHeader.ANY=allowDuplicates, multiValued
    /opt/apigee/edge-message-processor/conf/http.properties:HTTPHeader.Connection=allowDuplicates, multiValued
    … <snipped>
    /opt/apigee/edge-message-processor/conf/http.properties:HTTPHeader.Host=
    /opt/apigee/edge-message-processor/conf/http.properties:HTTPHeader.Expires=
    /opt/apigee/edge-message-processor/conf/http.properties:HTTPHeader.Date=allowDuplicates
    …
    <snipped>
    
  2. 構成の上書きで説明したように、 上記のサンプル出力の次の情報に注意してください。 <ph type="x-smartling-placeholder">
      </ph>
    1. HTTP ヘッダー Connection が上書きされていますが、次を含めることができます: 重複と複数の値
    2. HTTP ヘッダー HostExpires が上書きされ、 許可されない 重複と複数の値
    3. HTTP ヘッダー Date が上書きされ、重複が許可されます CANNOT TRANSLATE 複数の値を指定できます。
    4. ここに表示されるすべてのヘッダー(ConnectionHostExpiresDate (上記の例では)は、この例では既存の構成を持つヘッダーと呼ばれます。 ドキュメントをご覧ください
    で確認できます。 <ph type="x-smartling-placeholder">

Apigee Edge の動作

次の表に、ヘッダーがヘッダーとして送信された場合の Apigee Edge の動作を示します。 重複し、HTTPHeader プロパティの方法に応じて複数の値を持つ Message Processor で構成します。HTTPHeader は、 test-header

リクエスト conf/http.properties+HTTPHeader.test-header= の値に基づく送信ヘッダー
<空白> allowDuplicate multiValued allowDuplicate, multiValued(デフォルト)
test‑header=a,b test‑header=a,b test‑header=a,b

protocol.http.
DuplicateHeader

内部的には、test-header=a,b を次のように分割しています。

  • test-header=a
  • test-header=b,

この場合、DuplicateHeader エラーがスローされます。

test‑header=a,b

内部的には、test-header=a,b を次のように分割しています。

  • test-header=a
  • test-header=b,

元のフォームがターゲットに送信されます

test‑header=a
test‑header=b
protocol.http.
DuplicateHeader
test‑header=a
test‑header=b
protocol.http.
DuplicateHeader
test‑header=a
test‑header=b
<ph type="x-smartling-placeholder">

始める前に

このドキュメントの手順に進む前に、 プライベート クラウド上の Edge( Edge の構成方法をご覧ください。

ヘッダーに allowDuplicates と複数の値を構成する

<ph type="x-smartling-placeholder">

詳しくは、HTTP ヘッダーのプロパティで、 複数の値がある場合、プロパティ HTTPHeader.ANY = allowDuplicates, multivalued の値は、すべてのヘッダーに重複と複数の値を Apigee Edgeただし、特定のヘッダーの値が明示的に上書きされ、 プロパティを使用して、重複したヘッダーや複数の値を許可できます。 HTTPHeader.HEADER_NAME

このセクションでは、プロパティの設定方法について説明します。 HTTPHeader.HEADER_NAME: 任意の文字列に対して重複や複数の値を許可します。 構文に従って対応するトークンを使用して、Message Processor で Edge の構成方法をご覧ください。

<ph type="x-smartling-placeholder">

このセクションでは、例として Expires(と myheader)を使用します。 次のように指定します。これにより、重複や複数の値を許可できます。

  1. <ph type="x-smartling-placeholder"></ph> HTTPHeaderHEADER_NAME プロパティの現在の値を確認する 複製や複数の値を許可する設定が有効になっていないことを 次のコマンドを実行します。
    grep -ri "HTTPHeader.HEADER_NAME" /opt/apigee/edge-message-processor/conf
    

    たとえば、Expires ヘッダーのプロパティを設定する場合、次のようになります。 メッセージの HTTPHeader.Expires トークン プロパティの現在の値を確認する プロセッサ:

    grep -ri "HTTPHeader.Expires" /opt/apigee/edge-message-processor/conf
    

    上記のコマンドの出力は次のいずれかになります。

    1. このプロパティが空白に設定されると、値が上書きされる(また、 既存の構成を含むヘッダー)では、重複したヘッダーと複数のヘッダーが 使用できます。つまり、次を超える Expires ヘッダーを送信することはできません。 Apigee への HTTP リクエストまたは HTTP レスポンスの一部として 1 回使用できます。
    2. そのプロパティのヒットがない場合、その値は 上書きされる既存の構成を含むヘッダーではない)。つまり 構成の一部として複数回送信できること(重複は許容される)ことを HTTP リクエストまたは HTTP レスポンスを Apigee Edge に送信します。
    3. このプロパティに値 allowDuplicates, multivalued が設定され、 値が明示的に上書き されることを意味します(これは 既存の構成など)を参照します。つまり、この特定のヘッダーは 1 つ以上の Apigee への HTTP リクエストまたは HTTP レスポンスの一部として 1 回(重複が許可されます)。

    search コマンドの出力例:

    /opt/apigee/edge-message-processor/conf/http.properties:HTTPHeader.Expires=
    

    上記のサンプル出力は、プロパティ HTTPHeader.Expires が次のように設定されていることを示しています。 空白にします。つまり、プロパティが上書きされ 重複が許可されない またはヘッダーに複数の値Expiresを指定できます。

  2. 特定のヘッダーに対応するプロパティが 明示的に 重複や複数の値を許可しないようにように上書きします のみ、次の手順を実施してください。明示的に指定しなかった場合は、 このセクションの残りのステップはスキップしてください。
  3. 編集存在しない場合は、次の方法で作成できます。
    /opt/apigee/customer/application/message-processor.properties
    

    たとえば、ファイルを開くには、 vi で、次のように入力します。

    vi /opt/apigee/customer/application/message-processor.properties
    
  4. 次の形式で行を追加します。
    conf_http_HTTPHeader.Expires=allowDuplicates, multiValued
    
  5. 変更を保存します。
  6. プロパティ ファイルの所有者を apigee ユーザーに設定します。 そうでない場合は、次のコマンドを実行します。

    chown apigee:apigee /opt/apigee/customer/application/message-processor.properties
    
  7. Message Processor を再起動します。

    /opt/apigee/apigee-service/bin/apigee-service edge-message-processor restart
    

    トラフィックに影響を与えずに再起動するには、以下をご覧ください。 <ph type="x-smartling-placeholder"></ph> トラフィックに影響を与えずに Message Processor をローリング再起動する

  8. 複数の Message Processor がある場合は、すべての Message Processor です。

ヘッダーが重複と複数の値を持つように構成されていることを確認する

<ph type="x-smartling-placeholder">

このセクションでは、プロパティが 特定のヘッダーの HTTPHeader.HEADER_NAME が更新されました Message Processor で重複が許可されます。

ヘッダーの例として Expires を使用し、対応するプロパティが HTTPHeader.Expires が更新されました。

トークン conf_http_HTTPHeader.Expires を使用して値を更新します。 Message Processor で実際のプロパティ HTTPHeader.Expires が 新しい値が設定されます。

  1. Message Processor マシンで、次のプロパティを検索します。 HTTPHeader.HEADER_NAME/opt/apigee/edge-message-processor/conf ディレクトリに移動して、 次のように新しい値が設定されます。
    grep -ri "HTTPHeader.HEADER_NAME" /opt/apigee/edge-message-processor/conf
    

    たとえば、プロパティ HTTPHeader.Expires が設定されていることを確認するとします。 新しい値に置き換えてから、次のコマンドを実行します。

    grep -ri "HTTPHeader.Expires" /opt/apigee/edge-message-processor/conf
    
  2. 新しい値が HTTPHeader.HEADER_NAME に正常に設定された場合、 Message Processor で次のコマンドを実行すると、 http.properties ファイル。
  3. 構成した後の上記のコマンドのサンプル結果 allowDuplicatesmultiValued は次のとおりです。

    /opt/apigee/edge-message-processor/conf/http.properties:HTTPHeader.Expires=allowDuplicates, multiValued
    
  4. 上記の出力例では、プロパティ HTTPHeader.Expires が次のように変更されています。 新しい値 allowDuplicates, multiValued で設定し、 http.properties。これは、重複と複数の処理を許可する動作が HTTPHeader の値が Message Processor で正常に構成されています。
  5. プロパティ HTTPHeader.HEADER_NAME に古い値が引き続き表示される場合は、 記載されているすべての手順に ヘッダーに allowDuplicates と複数の値を構成する。 途中を抜けた場合は、すべての手順を正しく繰り返します。 <ph type="x-smartling-placeholder">

    プロキシが想定どおりに動作していることを確認する(特に、 プロキシのヘッダーを取得して設定します。

  6. それでもプロパティを変更できない場合は、Apigee Edge サポートにお問い合わせください。

ヘッダーの allowDuplicates を無効にする

このセクションでは、プロパティ HTTPHeader.{Headername} を次のように構成する方法について説明します。 メッセージの特定の HTTP ヘッダーに重複や複数の値を許可しません プロセッサ: 次の構文に従って、対応するトークンを使用します。 Edge の構成方法

<ph type="x-smartling-placeholder">

このセクションでは、例として Expires(と myheader)を使用します。 重複を許容しないヘッダーを設定します。

  1. <ph type="x-smartling-placeholder"></ph> HTTPHeaderHEADER_NAME プロパティの現在の値を確認する 重複と複数の値を許可するためにすでに無効ではないことを確認します。 次のコマンドを使用します。
    grep -ri "HTTPHeader.HEADER_NAME" /opt/apigee/edge-message-processor/conf
    

    たとえば、Expires ヘッダーのプロパティを設定する場合は、 Message Processor のプロパティ HTTPHeader.Expires トークンの現在の値:

    grep -ri "HTTPHeader.Expires" /opt/apigee/edge-message-processor/conf
    

    上記のコマンドの出力は次のいずれかになります。

    1. このプロパティが空白に設定されると、値 is が NOT に上書きされることになります。 重複ヘッダーと複数の値を許可します。つまり、送信が許可されていない HTTP リクエストまたは HTTP レスポンスの一部として複数回 Expires ヘッダーが含まれている Apigee に送信します。
    2. そのプロパティのヒットがない場合、その値は 上書きされません。これは既存の構成を含む NOT ヘッダーです。つまり 特定のヘッダーをモジュールの一部として複数回送信できる(重複は許容される)ことを Apigee Edge への HTTP リクエストまたは HTTP レスポンス。
    3. このプロパティに値 allowDuplicates, multivalued が設定され、 値は明示的に上書きされ、これは既存の構成であることを意味します。 ただし、これにより特定のヘッダーが複数回送信される可能性があります(重複は Apigee への HTTP リクエストまたは HTTP レスポンスの一部として使用できます。

    出力例 #1

    検索コマンドの出力例 1:

    /opt/apigee/edge-message-processor/conf/http.properties:HTTPHeader.Expires=allowDuplicates, multiValued
    

    サンプル出力は、プロパティ HTTPHeader.Expires が設定されていることを示しています。 allowDuplicates, multiValued。つまり、プロパティは ヘッダーで重複または複数の値を許可するように上書きします Expires

    出力例 2

    コマンドの例と検索コマンドの出力 #2

    grep -ri "HTTPHeader.myheader" /opt/apigee/edge-message-processor/conf
    

    サンプル出力には出力がありません。これは、プロパティが HTTPHeader.myheader はデフォルトで allowDuplicates, multiValued に設定されています。 これは、ヘッダー myheader のプロパティが上書きされない ことも意味します。

  2. 次のいずれかに気付いた場合は、このセクションの残りの手順を実施してください。 <ph type="x-smartling-placeholder">
      </ph>
    1. そのヘッダーに対応するプロパティが上書きされ、 重複と複数の値は、上記の出力例 #1 のようなものです(ヘッダーと 既存の構成
    2. そのヘッダーに対応するプロパティのヒットはありません。 上記の出力例 2既存の構成を含むヘッダーではない)

    それ以外の場合は、このセクションの残りの手順をスキップします。

  3. 次のファイルを編集します。存在しない場合は作成できます。
    /opt/apigee/customer/application/message-processor.properties
    

    たとえば、ファイルを開くには、 vi で、次のように入力します。

    vi /opt/apigee/customer/application/message-processor.properties
    
  4. プロパティ ファイルに次の形式の行を追加します。

    既存の構成

    シナリオ 1: 既存の構成を含むヘッダー:

    conf_http_HTTPHeader.Expires=
    

    既存の構成はありません

    シナリオ 2: 既存の構成を持つヘッダーでない場合:

    conf/http.properties+HTTPHeader.myheader=
    
  5. 変更を保存します。
  6. プロパティ ファイルの所有者を apigee ユーザーに設定します。そうでない場合 次のコマンドを実行します。
    chown apigee:apigee /opt/apigee/customer/application/message-processor.properties
    
  7. Message Processor を再起動します。
    /opt/apigee/apigee-service/bin/apigee-service edge-message-processor restart
    

    トラフィックに影響を与えずに再起動するには、以下をご覧ください。 <ph type="x-smartling-placeholder"></ph> トラフィックに影響を与えずに Message Processor をローリング再起動する

  8. 複数の Message Processor がある場合は、すべての Message Processor に対して上記の手順を繰り返します 決済代行業者。

重複と複数の値を許可しないようにヘッダーが構成されていることを確認する

このセクションでは、プロパティが 特定のヘッダーの HTTPHeader.HEADER_NAME が更新されました Message Processor で重複が許可されないようにします。

ヘッダーの例として Expires(と myheader)を使用し、 対応するプロパティ HTTPHeader.Expires(および HTTPHeader.myheader)が更新されました。

<ph type="x-smartling-placeholder">
  1. Message Processor マシンで、次のプロパティを検索します。 /opt/apigee/edge-message- processor/conf ディレクトリ内で HTTPHeader.HEADER_NAME を実行し、新しい値を次のように設定されているかどうかを確認します。 下に示します。

    grep -ri "HTTPHeader.HEADER_NAME" /opt/apigee/edge-message-processor/conf
    

    たとえば、プロパティ HTTPHeader.Expires が設定されていることを確認するには、 新しい値が変更されたら、次のコマンドを実行します。

    既存の構成

    grep -ri "HTTPHeader.Expires" /opt/apigee/edge-message-processor/conf
    

    既存の構成はありません

    grep -ri "HTTPHeader.myheader" /opt/apigee/edge-message-processor/conf
    
  2. 新しい HTTP ヘッダー値が HTTPHeader.HEADER_NAME Message Processor 上で、上記 コマンドが http.properties ファイルの新しい値を表示します。
  3. 無効にした後の上記のコマンドのサンプル結果 allowDuplicates は次のとおりです。

    既存の構成

    シナリオ 1: 有効期限ヘッダー既存の構成を含むヘッダー

    /opt/apigee/edge-message-processor/conf/http.properties:HTTPHeader.Expires=
    

    既存の構成はありません

    シナリオ 2: myheader ヘッダー(既存の構成を含むヘッダーではない)

    /opt/apigee/edge-message-processor/conf/http.properties:HTTPHeader.myheader=
    
  4. 上記の出力例では、プロパティ HTTPHeader.Expires(および HTTPHeader.myheader)に新しい値 {blank})が設定されました。 http.properties。これは、重複と可否を許容する動作が 特定の HTTP ヘッダー Expires(および myheader)に対して複数の値 無効化されました。
  5. プロパティ HTTPHeader.Expires (or HTTPHeader.myheader) の古い値が引き続き表示される場合は、 ヘッダーに allowDuplicates と複数の値を構成する 確認します。途中を抜けた場合は、すべての手順を正しく繰り返します。

    <ph type="x-smartling-placeholder">

    プロキシが想定どおりに動作していることを確認する(特に機能ロジックがある場合) プロキシのヘッダーを取得および設定します。

  6. それでもプロパティを変更できない場合は、Apigee Edge サポートにお問い合わせください。