我现在的问题是密切相关的this one,但更为具体。我们必须为这个问题中描述的目标规划一个设计策略。操纵HTTP响应
我们想通过来重写ASP.NET网页表单上的HTML。我的问题是:根据参数的可行性,性能影响和在传统应用的实施努力,哪个策略是最好的。
我要做
是基本上得到一个Web窗体的HTML输出,分析它,并根据用户定义的规则替换某些URL。在那个例子中,我会将所有静态内容重写为CDN URL,但它可以很容易地扩展到URL重写技术。我发现很多(我真的是很多)的约URL不必像http://myblog.com/2092
网址解释为http://myblog.com/Default.aspx?post=2092
的角度改写文章,但我没有发现我展示如何巧妙格式旧式的URL缩短格式正确从HTML内部(所以页面将直接渲染短格式的URL)[编辑]没有深入的代码干预。
策略1
像在上述问题的回答表明,写截取HTML和重写它的HTTP模块。实际上,我环顾四周,看到我可以设置一个执行HTML过滤的流对象Response.Filter
。
- 优点:我可以注入上的遗留应用的HTTP模块,经由XML配置重写规则,并且具有从CDN最古老的CRM /电子商务应用负载的静态内容,而完全不触摸它的代码。
- 缺点:我怀疑(和注释here确认本人嫌疑人),其具有重新实现
Stream
的Write
方法,该方法在一般情况下的局部缓冲器工作,可能会导致不良的替代品。假设Write方法首先用ttp://mydomain.com/static/ima
(我假定<img src="h
已被写入之前)和后面的ge.png" />
(因此猜测最终的URL :-P)这样的块用一个重写规则代入http://cdn.com/path/$1
的重写规则调用,但替换没有完成。要解决这一点,我可以用一个MemoryStream或类似的东西来缓冲一套完整的数据,然后进行换人,但它可能会导致在高负载的服务器
策略2
重写的烦恼Page
的Render
方法的方式,例如描述here
- 优点:不会受到分块问题
- 缺点:需要为所有页面定义基类。在新的应用程序上可行,不保证传统的应用程序。似乎已经因为你不能实例化一个问题HttpTextWriter直接
显然,对于新的webapps我们必须要发展,我会采取策略2,但我真的很喜欢使用动态组件了很多,因为他们可以当应用程序需要它们时可以轻松插入(因此,如果我们的新应用程序将在没有CDN的情况下安装,则关闭此功能)。
简单地说,我的问题是
你如何解决这两个战略缺点(尤其是第一次)?当然,您是否有其他策略可以实现这一目标?
谢谢。
你想在服务器端或客户端做到这一点? – Davidann 2011-01-05 21:27:07
如果您也有客户策略,欢迎您。它可以节省一些服务器的计算工作量。我问了一个服务器策略,但我的问题中有99%是** **,所以任何建议都是值得欢迎的!我对客户端策略的怀疑(我猜这是一个Javascript,它通过DOM/JQuery/XPath解析HTML)是我*应该*确保IMG URL在浏览器尝试加载它们以获得最佳性能之前被重写。无论如何,我很好奇你的策略! – 2011-01-05 21:31:44