2009-04-15 5 views
1

外部のプロキシサーバに対するレスポンスで、一部のURLを書き直そうとしています。応答フィルタを通過する際に応答が分割されていることがわかりました。その後、正規表現を使用してURLの検索と書き換えを行います。私たちが遭遇した問題は、分割される方法(分割される仕組みが正確ではない)、チャンク間で半分にカットされたURLが1つあったために、正規表現でチャンクと書き換えられませんでした。URLレスポンスフィルタでの書き換え

例。

"...<body><a href="http://myserver.local/"> 

スタートChunk2

"path/file.aspx">Some link</a>..." 

Chunk1

エンドだから私たちの正規表現が有効なURLとしてリンクをピックアップしていません。私たちはStringBuilderにレスポンスをプールして、URLを書き換えようとする前にすべての応答が得られるようにしましたが、その結果viewstateが壊れていました。何か案は?

答えて

0

Javaプラットフォームでは、私はユーティリティメソッドを使用してURLを記述します(申し訳ありませんが、asp.netには慣れていません)。この方法では、URLの書き換えはそのメソッドにフックし、URL全体を書き換えることができます。

非常に効率的に行うことができるという利点があります。欠点は、HTMLに裸のURLを置くことは決してできないということです。常にヘルパーメソッドを使用する必要があります。しかし、J2EEの場合、これは通常のベストプラクティスと見なされるため、オーバーヘッドは私たちの場合はあまりありませんでした。

書き換えを実装するために、http応答をラップし、encodeURLメソッドをオーバーライドするフィルタがあります。 .netにも同様の概念があるかどうかはわかりません。

+0

.NETに類似の概念がある場合、またはこれを処理するためのより良い方法がある場合は、変更することができます。私はフィルタでこれを処理して、各URLをラップするためにウェブサイトのすべてのページを変更する必要がないようにしたいと考えています。より良い解決策があるように思えます。 –

0

パフォーマンスが重要な場合は、DFA scannerという独自の実装を使用することができます。

必要なテーブルを作成するツールは、たとえばGOLD Parsing Systemです(DFAスキャナで検出されたトークンの文法を処理するLALRのものをスキップするだけです)。

0

ハイパーリンクはどのように生成されますか? ASP.Netリンクコントロールを使用してURLを生成している場合は、カスタムリンクコントロールを使用してリンクコントロールをサブクラス化できます。この新しいリンク制御は、プロキシを検出すると、即座にリンクを書き換えます。 HTMLが生成される前に必要に応じてリンクが変更されます。