Laravel应用如何确保浏览器始终发送X-Requested-With请求头?
确保浏览器始终发送X-Requested-With请求头的可行方案
问题背景
开发环境下服务器能正常返回JSON,但生产环境中无法返回,排查后发现核心差异:生产环境的浏览器未发送X-Requested-With请求头,而开发环境存在该请求头。
环境与已确认信息
- 技术栈:Laravel框架 + Metronic主题
- 生产部署:AWS ALB后的Fargate实例
- 开发环境:容器部署(无此问题)
- 已排查:非跨域问题,所有请求均为同域;手动通过Requestly添加该请求头后,服务器可正常返回JSON,但无法要求所有用户安装该工具
可行解决思路
前端配置(从请求源头解决)
- 全局配置Metronic的AJAX请求头:Metronic通常基于jQuery或Axios封装AJAX请求,找到项目中的全局AJAX配置文件(比如
assets/js/framework/base/app.js这类核心JS文件),统一添加请求头设置:- 若使用jQuery:
$.ajaxSetup({ headers: { 'X-Requested-With': 'XMLHttpRequest' } }); - 若使用Axios:
axios.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest';
- 若使用jQuery:
- 检查生产环境前端资源:确认生产环境下的JS文件是否被正确打包,避免在压缩、构建过程中误删全局请求头的配置代码。
Laravel后端兼容(兜底方案)
- 调整响应判断逻辑:如果服务器依赖该请求头返回JSON,可修改Laravel的响应规则,除检查
X-Requested-With外,还通过请求的Accept头判断是否返回JSON。例如在控制器或中间件中:if ($request->wantsJson() || $request->ajax()) { return response()->json($yourData); }wantsJson()方法会自动识别请求的Accept头,即便没有X-Requested-With也能正确返回JSON。 - 自定义中间件补全请求头:如果前端暂时无法调整,可编写中间件,当请求未携带
X-Requested-With时,根据请求的其他特征(比如是否为AJAX请求)补全该头,但这仅作为临时兜底,优先解决前端问题更稳妥。
AWS ALB配置排查
- 检查ALB的请求转发规则:确认ALB是否存在过滤或修改请求头的配置,比如监听器规则中是否移除了
X-Requested-With头。登录AWS控制台查看ALB的监听器设置,确保所有请求头完整转发到Fargate实例。
内容的提问来源于stack exchange,提问作者testkit
相关产品推荐
相关产品推荐

