You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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';
      
  • 检查生产环境前端资源:确认生产环境下的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 09:35:22