2009-04-15 9 views
1

Nous essayons de réécrire certaines URL dans notre réponse pour un serveur proxy externe. Nous avons remarqué que la réponse est interrompue lorsqu'elle traverse le filtre de réponse. Nous utilisons ensuite des expressions régulières pour localiser les URL et les réécrire. Le problème que nous avons rencontré est que de la façon dont il est divisé (pas exactement sûr comment il est segmenté), nous avions une URL qui était coupée en deux entre les morceaux, et donc notre expression régulière ne l'a pas ramassé soit morceau et il n'a pas été réécrit.Réécriture d'URL dans le filtre de réponse

Ex.

Fin de Chunk1

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

Début de Chunk2

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

donc notre expression régulière ne capte pas le lien comme une URL valide. Nous avons essayé de regrouper notre réponse dans un StringBuilder pour nous assurer que nous avons toute la réponse avant d'essayer de réécrire les URL, mais cela entraîne la corruption de viewstate. Des idées?

Répondre

0

Sur la plate-forme Java que j'utilise (désolé, pas familier avec asp.net), nous écrivons nos URL en utilisant une méthode utilitaire. De cette façon, la réécriture d'url peut se connecter à cette méthode et réécrire des URL entières.

L'avantage est que cela peut être fait très efficacement. L'inconvénient est que vous ne pouvez jamais mettre une simple URL dans le HTML, vous devez toujours utiliser la méthode d'assistance. Cependant, pour J2EE, ceci est considéré comme une bonne pratique normale, de sorte que les frais généraux n'étaient pas très importants dans notre cas.

Pour implémenter la réécriture, nous avons un filtre qui enveloppe la réponse http et remplace la méthode encodeURL. Je ne suis pas sûr si .net a un concept similaire.

+0

Si .NET a un concept similaire ou s'il existe une meilleure façon de gérer cela, je suis ouvert au changement. Je préférerais gérer cela dans un filtre afin que nous n'ayons pas à changer chaque page de notre site pour envelopper chaque URL. On dirait qu'il devrait y avoir une meilleure solution. –

0

Si les performances sont critiques, vous pouvez utiliser votre propre implémentation d'un DFA scanner.

Un outil pour créer les tables nécessaires serait par exemple le GOLD Parsing System (il suffit d'ignorer les éléments LALR, qui traiteraient la grammaire des jetons trouvés par le scanner DFA).

0

Comment vos hyperliens sont-ils générés? Si vous utilisez des contrôles de lien ASP.Net pour générer vos URL; vous pourriez juste sous-classer le contrôle de lien avec un contrôle de lien personnalisé. Ce nouveau contrôle de lien, lors de la détection du proxy, réécrirait vos liens à la volée; les liens sont donc modifiés avant que le HTML ne soit généré.