Express 如何判断请求是否来自 React Native 应用
如何通过 User-Agent 检测请求是否来自 React Native 应用
React Native 默认 User-Agent 特征
默认配置下,React Native 应用发起的所有网络请求(fetch、axios 等原生网络库调用),User-Agent 头都会携带 ReactNative 核心标识,后面会跟随RN版本、设备平台、系统版本等信息,示例如下:
ReactNative/0.71.8 (Android 13; Pixel 7 Build/TQ2A.230505.002)
ReactNative/0.72.0 (iPhone OS 16_5 like Mac OS X)
Node.js/Express 中的实现方法
你可以直接通过匹配 User-Agent 中的 ReactNative 关键词实现判断,推荐封装为中间件全局使用:
const express = require('express'); const app = express(); // RN 客户端检测中间件 const isReactNativeClient = (req, res, next) => { // 读取请求头中的 User-Agent,为空则默认返回非RN const userAgent = req.get('User-Agent') || ''; // 转小写后匹配,避免大小写差异导致漏判 req.isRN = userAgent.toLowerCase().includes('reactnative'); next(); }; // 全局注册中间件,所有路由都可以直接读取 req.isRN 属性 app.use(isReactNativeClient); // 路由内使用示例 app.get('/api/hello', (req, res) => { if (req.isRN) { res.json({ code: 0, msg: '请求来自 React Native 应用' }); } else { res.json({ code: 0, msg: '请求来自非 RN 客户端' }); } }); app.listen(3000);
注意事项
- 如果RN端开发者主动修改了默认的User-Agent,该检测逻辑会失效。这种场景建议和端侧约定专属自定义请求头(比如
X-Client-Type: ReactNative)做判断,可靠性更高。 - User-Agent 可以被任意伪造,该判断方式仅可用于普通的客户端类型区分,不能作为安全校验的依据。
- 不要依赖
ReactNative之外的其他UA字段做判断,不同RN版本、不同设备平台的UA后缀差异很大,只有ReactNative标识是稳定的。
内容的提问来源于stack exchange,提问作者Colin Wang
相关产品推荐
相关产品推荐

