-
-
-
-
書き換えポリシーにおけるコンテンツ長ヘッダーの動作
-
-
This content has been machine translated dynamically.
Dieser Inhalt ist eine maschinelle Übersetzung, die dynamisch erstellt wurde. (Haftungsausschluss)
Cet article a été traduit automatiquement de manière dynamique. (Clause de non responsabilité)
Este artículo lo ha traducido una máquina de forma dinámica. (Aviso legal)
此内容已经过机器动态翻译。 放弃
このコンテンツは動的に機械翻訳されています。免責事項
이 콘텐츠는 동적으로 기계 번역되었습니다. 책임 부인
Este texto foi traduzido automaticamente. (Aviso legal)
Questo contenuto è stato tradotto dinamicamente con traduzione automatica.(Esclusione di responsabilità))
This article has been machine translated.
Dieser Artikel wurde maschinell übersetzt. (Haftungsausschluss)
Ce article a été traduit automatiquement. (Clause de non responsabilité)
Este artículo ha sido traducido automáticamente. (Aviso legal)
この記事は機械翻訳されています.免責事項
이 기사는 기계 번역되었습니다.책임 부인
Este artigo foi traduzido automaticamente.(Aviso legal)
这篇文章已经过机器翻译.放弃
Questo articolo è stato tradotto automaticamente.(Esclusione di responsabilità))
Translation failed!
ストリーミング書き換えアクションでの Content-Length ヘッダーの動作
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
<!--NeedCopy-->
作業シナリオでは、この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';
<!--NeedCopy-->
ただし、動作していないシナリオでクライアントが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';
<!--NeedCopy-->
一般に、クライアントアプリケーションは Content-Length ヘッダー、チャンクエンコーディング、FIN ターミネーションの 3 つのトランザクション方法すべてをサポートします。そのため、Content-Length ヘッダーから FIN ターミネーションに変換しても問題は発生しないはずです。ただし、この変更によりアプリケーションが動作しない場合は、 ストリーミングプロセスを無効にする必要があります。
リライトポリシーでストリーミングプロセスを無効にする方法
次のいずれかの方法を使用して、リライトポリシーのストリーミングプロセスを無効にできます。
-
より高い優先度でバインドされている書き換えポリシーに関連する非ストリーミングアクションを追加します。アクションは、応答を変更しないような方法で行う必要があります。
次に例を示します:
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")
この書き換えアクションの本文の値は、現在のストリーミングアクションが動作している値よりも大きくなければなりません。
-
ストリーミング設定の代わりに、非ストリーミング設定を使用してください。
注:
ストリーミング処理から非ストリーミング処理に移行すると、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") <!--NeedCopy-->
非ストリーミング構成:
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/) <!--NeedCopy-->
共有
共有
This Preview product documentation is Cloud Software Group Confidential.
You agree to hold this documentation confidential pursuant to the terms of your Cloud Software Group Beta/Tech Preview Agreement.
The development, release and timing of any features or functionality described in the Preview documentation remains at our sole discretion and are subject to change without notice or consultation.
The documentation is for informational purposes only and is not a commitment, promise or legal obligation to deliver any material, code or functionality and should not be relied upon in making Cloud Software Group product purchase decisions.
If you do not agree, select I DO NOT AGREE to exit.