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

如何使用boost::beast检测Ajax请求?

用Boost.Beast检测Ajax请求

判断Ajax请求的核心依据是浏览器发送的**X-Requested-With: XMLHttpRequest**请求头——这是原生XMLHttpRequest对象会自动添加的标识(注:原生fetch API默认不会携带该头,需要前端手动设置)。虽然这个头可以被客户端伪造,但如果浏览器按规范发送了该数据,你可以用Boost.Beast直接读取请求头来判断。

实现步骤

Boost.Beast的http::request对象提供了便捷的头操作方法,你可以通过以下方式检测:

  1. 使用预定义的字段枚举http::field::x_requested_with查找请求头
  2. 检查头的值是否为XMLHttpRequest

代码示例

#include <boost/beast/http.hpp>

namespace http = boost::beast::http;

// 传入已解析的HTTP请求对象,判断是否为Ajax请求
bool is_ajax_request(const http::request<http::dynamic_body>& req) {
    // 查找X-Requested-With头
    auto header_it = req.find(http::field::x_requested_with);
    if (header_it != req.end()) {
        // 匹配标准的Ajax标识值
        return header_it->value() == "XMLHttpRequest";
    }
    // 若未找到该头,判定为非Ajax请求
    return false;
}

注意事项

  • fetch API的特殊情况:如果前端用fetch发送请求,默认不会添加X-Requested-With头,需要前端手动配置:
    fetch('/api/data', {
        headers: {
            'X-Requested-With': 'XMLHttpRequest'
        }
    });
    
  • 不可信的标识:该头可以被客户端随意修改,不能用于安全校验(比如权限控制),仅适合用于业务逻辑区分(比如返回JSON还是HTML页面)。
  • 其他辅助判断:你也可以结合Accept或Content-Type头辅助判断(比如Ajax请求常接受application/json),但这些都不是绝对可靠的标识,核心判断仍以X-Requested-With为准。

内容的提问来源于stack exchange,提问作者Samuel Smith

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 11:52:05