5

パケットから直接 HTTP データを解析しています (TCP が再構築されているかどうかに関係なく、そうであると想定できます)。

HTTP をできるだけ正確に解析するための最良の方法を探しています。

ここでの主な問題は、HTTP ヘッダーです。

HTTP/1.1の基本的なRFC を見ると、HTTP ヘッダーの解析が複雑になるようです。RFC では、ヘッダーのさまざまな部分の非常に複雑な正規表現について説明しています。

HTTP ヘッダーのさまざまな部分を解析するには、これらの正規表現を作成する必要がありますか?

これまでに書いた HTTP ヘッダーの基本的な解析は、一般的な HTTP ヘッダー用です。

message-header = field-name ":" [ field-value ]

また、セクション 4.2 で説明したように、内部をカンマ区切りの値に置き換えLWS、繰り返しSPヘッダーを同じものに置き換えました。field-name

ただし、たとえばセクション 14.9 を見ると、さまざまな部分を解析するfield-valueには、はるかに複雑な解析スキームが必要であることがわかります。

field-valueパーサーのユーザーに HTTP のすべての機能を提供し、HTTP のすべての部分を解析したい場合、HTTP 解析の複雑な部分 (特に ) をどのように処理する必要があると思いますか?

このための設計提案も高く評価されます。

ありがとう。

4

2 に答える 2

9

私は単一責任の校長に従います。人が知っているすべての HTTP ヘッダーのすべての詳細を知る単一のモノリシック パーサーを作成しようとするのではなく、よりシンプルにします。フィールド名を解析し、その名前を生の値に関連付けるだけの単純な拡張可能なパーサーを作成します。次に、単一の種類のヘッダーの解析のみを担当するプラグ可能な拡張機能を利用します。パーサーのインスタンスを作成するときは、拡張機能のコレクションを挿入し、各拡張機能を解析方法を認識している一連のフィールド名にマップします。

このアプローチでは、一石二鳥です。コア パーサーはシンプルで的を絞ったままです。また、内臓をいじる必要なくパーサーを拡張できるため、より堅牢なコードが得られます。

于 2010-06-13T05:58:14.660 に答える
1

System.Net.Http.Headers名前空間内にはたくさんのパーサーがあります。一見の価値があります。

于 2015-10-07T20:29:09.597 に答える