http
请求的是谁,请求的路径为/bundles/someBundle?v=1hDzBpmYJm4Iu-OjRN1YqS1WeNThVl0kStLJGP8WCr41
?
由于每个捆绑包的哈希值仅计算一次(在第一次请求时),它实际上保存在哪里,如果传入的哈希值不匹配,是否可以返回 404 ?
http
请求的是谁,请求的路径为/bundles/someBundle?v=1hDzBpmYJm4Iu-OjRN1YqS1WeNThVl0kStLJGP8WCr41
?
由于每个捆绑包的哈希值仅计算一次(在第一次请求时),它实际上保存在哪里,如果传入的哈希值不匹配,是否可以返回 404 ?
"拦截"~/bundles/someBundle的传入http请求的责任是什么
没有传入到~/bundles/someBundle
的请求。在服务器端使用的帮助程序(Scripts.Render
)会在同一HTTP请求中解释此值,并在生成的HTML中输出正确的url。
由于每个bundle的哈希值只计算一次(在第一次请求时),那实际上它在哪里保存呢?
实际的bundle内容存储在服务器端缓存:HttpContext.Cache
。实际的哈希值表示对每次使用Scripts.Render
帮助程序计算的此内容的SHA256哈希。
更新:
当您引用System.Web.Optimization程序集时,自动注册的System.Web.Optimization.BundleModule
负责拦截像/bundles/someBundle?v=1hDzBpmYJm4Iu-OjRN1YqS1WeNThVl0kStLJGP8WCr41
这样的URL请求,并返回实际内容。
System.Web.Optimization
зЁ‹еғЏй›†еә•з”Ёе€°ж‚Ёзљ„йҰ№з›®дёж—¶пәЊж¤жЁҰеқ—дәљдҢүз”ЁPreApplicationStart
и‡ҒеЉЁжіЁе†ЊгЂ‚ - Darin Dimitrov你的Web项目中应该有一个名为BundleConfig.cs的文件,位于App_Start文件夹中。
这个部分基本上将一个URL“/bundles/something”链接到一些脚本。当在Release模式下访问网站(未激活调试)时,它会自动将脚本合并成一个内存文件,最小化脚本,向请求添加缓存头,并生成文件内容的哈希值。
如果你处于调试状态,所有脚本都应该被分开以便于调试。
你可以重新定义在该文件中看到的bundles或声明一些自己的bundles。
祝使用愉快。
将查询字符串附加到基于正在提供的实际文件内容的参数,是为了解决缓存问题。这样,您可以告知浏览器将此请求缓存长时间,并加速后续页面加载时间。
因此,对于这种捆绑机制的开发人员来说,该参数没有任何区别。唯一重要的事情是,如果更改脚本或CSS的内容,则哈希值会更改,从而强制客户端浏览器从服务器请求新文件。
至于谁负责拦截这些请求-在codeplex上有MVC的源代码可用,但我猜它恰好插入路由。