兰 亭 墨 苑
期货 · 量化 · AI · 终身学习
首页
归档
编辑文章
标题 *
URL 别名 *
内容 *
(支持 Markdown 格式)
`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格式返回所有这些信息。 ```javascript 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超越传统无服务器计算的核心优势之一。
配图 (可多选)
选择新图片文件或拖拽到此处
标签
更新文章
删除文章