学习目标
阅读本文后,您将能够:
- 区分请求、脚本读取和渲染测试这三类来源
- 判断一项信息是浏览器主动带上的,还是页面测出来的
- 理解权限和浏览器差异会改变最终拿到的集合
请求里自带的信息
您一打开页面,浏览器就会在请求里带上一部分字段。网站不用再跑脚本,也能看到这些。
| 浏览器会带上 | 网站因此知道 |
|---|---|
| IP | 浏览器这次请求使用的公网地址 |
| User-Agent | 浏览器和平台的一份声明 |
| Accept-Language | 浏览器优先使用的语言 |
这些字段跟着每次请求走。页面还没执行 JavaScript,它们已经到了服务器。
脚本主动读取的信息
页面里的 JavaScript 可以调用浏览器提供的 API,读取当前环境里已经暴露的值。
| 页面可以读取 | 大致来自 |
|---|---|
| 屏幕与窗口 | Screen、Viewport 等显示信息 |
| 时区、语言 | 浏览器的区域设置 |
| Client Hints | 浏览器主动提供的部分平台信息 |
| WebGL 参数 | 显卡与渲染器名称一类字段 |
脚本只能读到 API 返回的那一项。没有对应接口,页面就拿不到。
渲染和测试得到的信息
有些信息不是现成字段。网站要让浏览器画一段图、试一个功能,再看结果。
| 网站做的事 | 得到的是 |
|---|---|
| 画 Canvas | 这段图在当前环境里怎么被画出来 |
| 跑 WebGL | 3D 路径的渲染结果 |
| 探测 API | 这个浏览器实际支持哪些功能 |
和前两类相比,这里多了一次测试。结果取决于当前这套渲染和功能环境。
为什么要分清这三类?
换 IP 只改请求出口。清 Cookie 不改屏幕、时区和渲染结果。知道信息从哪一条路来,才知道改动会碰到哪一类、碰不到哪一类。
为什么不同网站拿到的不一样
- 网站不是把整台电脑读走。没有接口的内容,页面拿不到。
- 有的站只看请求,有的站还会跑脚本和渲染测试。
- 浏览器的隐私设置会关掉或改写一部分字段。
- 同一项信息,不同浏览器返回的详细程度可能不同。
- 权限弹窗挡住的能力,页面在您允许之前读不到。
常见问题
网站是不是可以读取我电脑里的文件?
不能靠这些途径读取您的文件。它拿到的是请求、API 和测试结果,不是磁盘上的文档。
关掉 JavaScript 以后,网站就什么都看不到了吗?
脚本读取和渲染测试会停。请求里自带的 IP、User-Agent 和语言仍然会到服务器。
每个网站用的是同一套采集吗?
不是。采集哪些字段由网站自己决定,也受浏览器允许的范围限制。