request.cf 对象是Cloudflare workers的一大特色,它像一个“信息宝库”,装满了Cloudflare在处理请求时为您收集的各种宝贵上下文数据。这些数据远不止地理位置,涵盖了安全性、性能和网络连接的方方面面。
利用这些数据,您可以在边缘构建出极其智能和强大的应用程序。以下是request.cf对象中除了地理位置之外的其他关键数据及其应用场景:
1. 安全与威胁情报 (Security & Threat Intelligence)
这是request.cf最强大的功能之一,它直接将Cloudflare的安全分析能力交到您的手中。
| 属性 (Property) | 示例值 | 描述与应用场景 |
| :--- | :--- | :--- |
| clientTrustScore | 14 | 一个从1到99的整数,表示Cloudflare对该访客的信任评级。 分数越低,信任度越高(例如,来自已知良好IP的常规用户)。分数越高,越可疑(例如,被标记为垃圾邮件发送者、爬虫或来自僵尸网络的IP)。<br>应用场景:<br> - 动态访问控制:对分数高于90的请求直接在边缘返回403 Forbidden,保护源站。 <br> - 智能验证码:对分数在50-90之间的“可疑”访客,在返回页面前注入一个Cloudflare Turnstile或hCaptcha质询,而不是打扰所有用户。 <br> - API保护:拒绝来自低信任度IP的API调用。 |
| botManagement.score | 25 | 与clientTrustScore类似,但这是专门用于机器人管理的分数(1-99)。 分数越低,越可能是人类;分数越高,越可能是自动化机器人。<br>应用场景:<br> - 内容抓取保护:如果分数高于某个阈值(例如30),则返回一个简化版或略微过时的内容,防止竞争对手抓取您的实时数据。 <br> - 防止表单滥用:在处理登录或注册表单提交时,如果分数很高,则直接拒绝,防止机器人恶意注册。 |
2. 性能与连接细节 (Performance & Connection Details)
这些数据让您了解用户是如何连接到您的服务的,从而可以进行针对性的优化。
| 属性 (Property) | 示例值 | 描述与应用场景 |
| :--- | :--- | :--- |
| httpProtocol | "HTTP/3" | 客户端浏览器用于连接到Cloudflare的HTTP协议版本。 可能是 "HTTP/1.1", "HTTP/2", 或 "HTTP/3"。 <br>应用场景:<br> - 性能分析:记录此数据以分析您的用户中有多少比例正在享受HTTP/2或HTTP/3带来的性能提升。 <br> - 功能降级:虽然罕见,但如果某项功能依赖于HTTP/2的特定特性,您可以为仍在使用HTTP/1.1的用户提供一个备用方案。 |
| tlsVersion | "TLSv1.3" | 客户端与Cloudflare之间建立的TLS连接版本。 例如 "TLSv1.2", "TLSv1.3"。 <br>应用场景:<br> - 强制安全策略:您可以编写Worker逻辑,如果tlsVersion是过时的 "TLSv1.1" 或 "TLSv1.0",则直接拒绝连接,强制用户使用更安全的现代浏览器。 |
| tlsCipher | "AEAD-AES128-GCM-SHA256" | 用于TLS连接的加密套件。 <br>应用场景:<br> - 满足合规性要求:在金融或政府等高度管制的行业,您可以记录并审计所有连接是否都使用了符合标准的强加密套件。对使用弱加密套件的连接发出警报或直接阻止。 |
| clientAcceptEncoding | "gzip, deflate, br" | 一个字符串,表示客户端浏览器支持的压缩算法(例如Brotli)。 <br>应用场景:<br> - 智能压缩:虽然Cloudflare会自动处理压缩,但您可以在Worker中利用此信息做出更复杂的决策。例如,如果一个API端点返回的数据对于Brotli压缩效果特别好,您可以优先为支持它的客户端提供Brotli压缩的内容。 |
3. 路由与网络信息 (Routing & Network Information)
这些数据提供了关于请求是如何通过Cloudflare网络到达Worker的洞察。
| 属性 (Property) | 示例值 | 描述与应用场景 |
| :--- | :--- | :--- |
| colo | "SJC" | 处理该请求的Cloudflare数据中心的三字母机场代码。 "SJC" 代表加州圣何塞,"LHR" 代表伦敦希思罗。 <br>应用场景:<br> - 调试与延迟分析:这是非常有用的调试工具。如果一个欧洲用户报告延迟很高,您可以在日志中检查他的请求是否被正确地路由到了欧洲的colo(如LHR, FRA),还是被错误地路由到了美国(如SJC, IAD)。 <br> - 数据本地化:结合地理位置数据,您可以确保处理请求的colo与用户所在的法律管辖区一致,以满足GDPR等数据主权要求。 |
| asn | 15169 | 发起请求的IP地址所属的自治系统(AS)编号。 这通常对应于用户的互联网服务提供商(ISP),例如Google或Comcast。 <br>应用场景:<br> - 特定网络优化:如果您发现来自某个特定ASN的流量特别大或性能不佳,您可以应用特殊的路由或缓存规则。 <br> - B2B应用:如果您的客户是某个大公司,您可以识别来自该公司ASN的流量,并为其提供定制化的体验或更高的服务优先级。 |
示例Worker代码:一个“信息探测器”
您可以轻松部署下面这个Worker,来亲身体验request.cf的丰富内容。当您访问它时,它会以JSON格式返回所有这些信息。
export default {
async fetch(request) {
// 创建一个对象来存储我们感兴趣的数据
const cfData = {
// 安全信息
clientTrustScore: request.cf.clientTrustScore,
botManagementScore: request.cf.botManagement?.score, // 使用可选链,因为botManagement可能不存在
// 性能与连接信息
httpProtocol: request.cf.httpProtocol,
tlsVersion: request.cf.tlsVersion,
tlsCipher: request.cf.tlsCipher,
clientAcceptEncoding: request.headers.get('accept-encoding'), // 这个信息在标准请求头里
// 路由与网络信息
colo: request.cf.colo,
asn: request.cf.asn,
isp: request.cf.asOrganization, // 更友好的ISP名称
// 地理位置信息(作为对比)
country: request.cf.country,
city: request.cf.city,
timezone: request.cf.timezone,
};
// 将数据格式化为漂亮的JSON并返回
return new Response(JSON.stringify(cfData, null, 2), {
headers: {
'Content-Type': 'application/json;charset=UTF-8',
},
});
},
};
总结来说,request.cf对象将Cloudflare庞大的全球网络所具备的独特洞察力,直接赋能给开发者。它让您不仅仅是编写响应请求的代码,而是在一个充满上下文感知的环境中,根据用户的身份、安全性、连接质量和地理位置,实时、动态地塑造用户体验。这正是Cloudflare Workers超越传统无服务器计算的核心优势之一。