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

如何在Apache/PHP服务端检测PWA发起的Web请求?

如何在Apache/PHP服务端检测iOS PWA模式

好问题!iOS上添加到主屏幕的PWA(Web App模式)确实带有服务端可直接检测的专属请求标识,完全不用依赖Cookie或者前端提前标记,这是最简便的方案。

核心检测依据:两个专属请求头特征

iOS的PWA模式发起请求时,会自带两个关键标识,你可以任选其一或结合判断:

  • X-Requested-With 请求头:PWA模式下这个头会被系统设置为 com.apple.mobilesafari,而普通Safari浏览器请求时不会携带这个头(或者值为空)。
  • User-Agent 字符串:PWA模式下的UA会包含 AppleWebApp/[版本号] 这样的片段(比如 AppleWebApp/605.1.15,版本号随iOS更新变化),普通Safari的UA则没有这个片段。

PHP端直接检测的代码示例

直接读取服务端全局变量就能判断,代码很简洁:

<?php
$isIosPwa = false;

// 获取请求头和UA信息
$xRequestedWith = $_SERVER['HTTP_X_REQUESTED_WITH'] ?? '';
$userAgent = $_SERVER['HTTP_USER_AGENT'] ?? '';

// 结合两个条件判断,提高准确性
if ($xRequestedWith === 'com.apple.mobilesafari' || str_contains($userAgent, 'AppleWebApp/')) {
    $isIosPwa = true;
}

// 后续根据状态输出差异化内容
if ($isIosPwa) {
    // PWA模式:输出返回按钮
    echo '<button class="back-btn">返回上一页</button>';
} else {
    // 普通浏览器:不输出按钮或输出其他内容
}
?>

Apache层面预配置(可选)

如果想在Apache服务器层面先完成检测,比如设置环境变量供PHP或其他脚本使用,可以用SetEnvIf指令:

# 检测iOS PWA模式,设置环境变量IS_IOS_PWA
SetEnvIf X-Requested-With "com.apple.mobilesafari" IS_IOS_PWA=1
SetEnvIf User-Agent "AppleWebApp/" IS_IOS_PWA=1

# 之后PHP里可以直接通过$_SERVER['IS_IOS_PWA']获取状态

几个注意点

  • 版本兼容性:AppleWebApp/ 标识从iOS 11.3开始引入,现在绝大多数iOS用户都是13+版本,这个标识足够可靠;如果要兼容更早版本,可能需要额外结合window.navigator.standalone的前端检测作为兜底。
  • 双重验证更可靠:单独依赖UA可能存在伪造风险,但X-Requested-With是iOS系统在PWA模式下自动添加的,篡改难度高,建议两个条件结合判断。
  • 前端兜底方案:虽然服务端检测很方便,但极端情况下(比如某些小众iOS版本或浏览器篡改请求头),可以同时保留前端JS检测:
// 前端判断是否处于PWA独立模式
if (window.navigator.standalone) {
    document.querySelector('.back-btn')?.classList.remove('hidden');
}

这样服务端+前端的组合方案,既能实现差异化内容输出,又能保证兼容性和准确性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 04:07:03