Symfony的“dev”防火墙为何要处理css|images|js资源?
嘿,这个问题问得特别到位,我刚上手Symfony的时候也纠结过这点!其实核心原因和开发环境下静态资源的处理方式直接相关:
在开发环境中,如果你用Symfony自带的内置服务器(symfony server:start)启动项目,所有请求——包括CSS、图片、JS这些静态资源——都会先经过Symfony内核处理,和生产环境里由Nginx/Apache直接托管静态资源的逻辑完全不同。
要是这些静态资源的路径没被dev防火墙排除,它们就会被其他防火墙规则(比如默认的main防火墙)拦截。举个实际的例子:如果你的main防火墙配置了必须登录才能访问,那页面加载时,CSS、图片这些资源请求都会被跳转到登录页,直接导致页面样式全挂、资源加载失败,开发体验简直糟透了。
而dev防火墙设置了security: false,作用就是让匹配到的请求完全跳过安全检查、直接放行。把css|images|js加进去,就是为了确保开发时这些静态资源能不受任何防火墙规则影响,正常加载,不用额外去调整其他防火墙的配置。
至于官方文档只提到/_profiler和/_wdt,可能是因为这部分属于开发工具的“显性需求”,而静态资源的处理是内置服务器场景下的“隐性必备”——默认大家都会用内置服务器开发,所以文档没特意展开讲,但这个配置是保证开发体验流畅的关键。
顺便提一句,生产环境里根本不需要这个配置,因为生产环境的web服务器会直接处理静态资源请求,根本不会传到Symfony内核,自然也不会触发防火墙规则。
The dev firewall is really a fake firewall: it makes sure that you don't accidentally block Symfony's dev tools - which live under URLs like /_profiler and /_wdt.
备注:内容来源于stack exchange,提问作者Hans Grinwis

