ping属性必须与合法href共存才生效,Chrome默认启用但限制iframe和HTTP环境,Firefox默认禁用,Safari完全不支持;其请求绕过CORS和Cookie策略,需后端校验text/ping类型、PING-FROM头及限速,且不传业务参数、无响应反馈。

ping属性必须和href一起用,否则根本不发请求
浏览器强制要求 ping 只能在合法 href 存在时才触发——href 不能是 javascript:void(0)、空字符串、# 或其他非可跳转 URL。常见错误写法:<a ping="/log">点我</a>(缺 href),或 <a href="#" ping="/log">点我</a>(# 不算有效目标)。只有像 <a href="https://example.com" ping="/log">点我</a> 这样,用户真实点击后,浏览器才会并发一个 POST 到 /log。
Chrome/Firefox/Safari 兼容性差异极大,Safari 完全不支持
别指望统一行为:ping 在 Safari 中自始至终未实现,连 UA 检测都省了;Firefox 默认禁用且不可开启;Chrome 虽默认启用,但从 98 版起屏蔽 iframe 内第三方上下文的 ping,94 版起还静默丢弃 HTTP 环境下的请求(控制台无报错)。这意味着:你上线后发现没日志,大概率不是代码问题,而是用户用 Safari、页面嵌在 iframe 里,或还在用 HTTP 协议。
后端必须校验 text/ping 类型和 PING-FROM 头,否则就是安全入口
ping 请求是 POST,但 Content-Type 固定为 text/ping(不是 text/pingback),且带 PING-FROM 请求头(值为当前页面完整 URL)。后端若不做以下检查,等于开放 SSRF 和日志注入通道:
将调研报告、方案对比、数据分析、需求梳理、会议纪要、设计说明、代码评审、学习笔记等任务产物输出为可在浏览器直接打开的单文件 HTML,替代 Markdown 作为最终交付物。Markdown 在信息密度、视觉清晰度和可分享性上已跟不上 AI 产物的丰富度,HTML 能同时承载排版、表格、SVG 等。
- 拒绝非
text/ping的Content-Type(如application/json) - 验证
PING-FROM是合法 HTTP(S) URL,且不含内网地址(http://127.0.0.1、http://192.168.0.0/16) - 单 IP 每分钟限速 ≤3 次,超限返回
429且响应体为空 - 同源 endpoint 必须禁用 Cookie(或设为独立子域),避免静默携带登录态
它不传业务参数,也不保证送达,别当核心埋点用
ping 请求体固定为字符串 "PING",无法塞 utm_source、用户 ID 或上下文字段;没有回调、不能重试、页面关闭时可能被中断。它只适合记录“某链接被点了”,而非“谁在哪点了什么”。真正要保底上报,得用 navigator.sendBeacon() 配合 click 事件拦截——先发 Beacon,再跳转,且 payload 要包成 Blob。而 ping 的价值,仅在于 JS 失效或极简场景下的“尽力而为”旁路通知。
立即学习“前端免费学习笔记(深入)”;


















