ADC
ご意見をお寄せいただきありがとうございました

この記事は機械翻訳されています.免責事項

ストリーミングリライトアクションにおけるコンテンツ長ヘッダーの動作

Content-Length ヘッダーは、HTTP リクエストまたはレスポンス内のメッセージの長さ (バイト単位) を示す方法の 1 つです。Content-Length ヘッダーとは別に、次のいずれかの方法でメッセージの長さを指定することもできます。

  • チャンクエンコーディング
  • FIN ターミネーション

ストリーミングプロセスでは、NetScalerは書き換えアクションを処理した後もデータを継続的に送信します。データは継続的に送信され、NetScalerには保持されないため、クライアントに送信されるメッセージの実際の長さは不明です。そのため、Content-Length ヘッダーの正しい値をレスポンスに記載することはできません。

ストリーミング処理をサポートするために、NetScalerの書き換え機能では、メッセージの長さを指定する方法がContent-LengthヘッダーからFINターミネーションに変換されます。変換の一環として、NetScalerはヘッダー名の最初の4文字を再配置することでContent-Lengthヘッダーを壊します。

HTTP では、クライアントは理解できないヘッダーを無視することが予想されます。そのため、クライアントは破損した Content-Length ヘッダー名を認識できないため、ヘッダーを無視します。NetScalerのパフォーマンスを向上させるため、ヘッダーは削除されるのではなく破損されます。削除する代わりにヘッダー名を変更すると、同じバイトの順序が異なる場合でもチェックサムは変更されないため、チェックサムの再計算を回避できます。

たとえば、次の HTTP リクエストを考えてみましょう。

GET / HTTP/1.1 Accept: application/x-ms-application, image/jpeg, application/xaml+xml, image/gif, image/pjpeg, application/x-ms-xbap, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, / Accept-Language: en-GB User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/7.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; CMDTDF; MS-RTC LM 8) Accept-Encoding: gzip, deflate Host: test.example.net Connection: Keep-Alive

作業シナリオでは、このHTTPリクエストに対するNetScalerとバックエンドサーバー間の応答は次のようになります。

HTTP/1.1 200 OK Content-Length: 10967 Connection: close var SERVER_URL = 'https\x3a\x2f\x2ftest.example.net\x2f'; var WEB_SERVER_HOST = 'test.example.net';

ただし、動作していないシナリオでクライアントがNetScalerから受け取る応答は次のとおりです。 Content-Length ヘッダーの名前がntcoent-Lengthに変更されました。

HTTP/1.1 200 OK ntCoent-Length: 10967 nnCoection: close var SERVER_URL = 'https\x3a\x2f\x2ftest.example.net\x2f'; var WEB_SERVER_HOST = 'test.example.net';

一般に、クライアントアプリケーションは Content-Length ヘッダー、チャンクエンコーディング、FIN ターミネーションの 3 つのトランザクション方法すべてをサポートします。そのため、Content-Length ヘッダーから FIN ターミネーションに変換しても問題は発生しないはずです。ただし、この変更によりアプリケーションが動作しない場合は、 ストリーミングプロセスを無効にする必要があります

リライトポリシーでストリーミングプロセスを無効にする方法

次のいずれかの方法を使用して、リライトポリシーのストリーミングプロセスを無効にできます。

  1. より高い優先度でバインドされている書き換えポリシーに関連する非ストリーミングアクションを追加します。アクションは、応答を変更しないような方法で行う必要があります。

    例:

    add rewrite action non_stream_act replace_all HTTP.RES.BODY(1000000) HTTP.RES.FULL_HEADER -search text("pattern_which_will_not_match_in_body")

    この書き換えアクションの本文の値は、現在のストリーミングアクションが動作している値よりも大きくなければなりません。

  2. ストリーミング設定の代わりに、非ストリーミング設定を使用してください。

    注:

    ストリーミング処理から非ストリーミング処理に移行すると、NetScalerのパフォーマンスに影響する可能性があります。

    たとえば、ストリーミング構成は、次のように非ストリーミング構成に変換できます。

    ストリーミング設定:

    add rewrite action rw_act_1 replace_all HTTP.RES.BODY(1000) ""http"" -search text("http") add policy patset pat_list bind policy patset pat_list abcd bind policy patset pat_list defg add rewrite action rw_act_2 replace_all HTTP.RES.BODY(1000) ""replaced_data"" -search patset("pat_list")

    非ストリーミング構成:

    add rewrite action rw_act_1 replace_all HTTP.RES.BODY(1000) ""http"" -search regex(re/http/) add rewrite action rw_act_1 replace_all HTTP.RES.BODY(1000) ""http"" -search regex(re/abcd|defg/)
このコンテンツの正式なバージョンは英語で提供されています。Cloud Software Groupドキュメントのコンテンツの一部は、お客様の利便性のみを目的として機械翻訳されています。Cloud Software Groupは機械翻訳されたコンテンツを管理していないため、誤り、不正確な情報、不適切な用語が含まれる場合があります。英語の原文から他言語への翻訳について、精度、信頼性、適合性、正確性、またはお使いのCloud Software Group製品またはサービスと機械翻訳されたコンテンツとの整合性に関する保証、該当するライセンス契約書またはサービス利用規約、あるいはCloud Software Groupとのその他すべての契約に基づき提供される保証、および製品またはサービスのドキュメントとの一致に関する保証は、明示的か黙示的かを問わず、かかるドキュメントの機械翻訳された範囲には適用されないものとします。機械翻訳されたコンテンツの使用に起因する損害または問題について、Cloud Software Groupは責任を負わないものとします。
ストリーミングリライトアクションにおけるコンテンツ長ヘッダーの動作