我在 NGINX(Rust 模块)中尝试了 Cloudflare 的 “Markdown for Agents” 想法 — 初步原型

发布: (2026年3月2日 GMT+8 15:21)
4 分钟阅读
原文: Dev.to

Source: Dev.to

介绍

Cloudflare 最近推出了 Markdown for Agents:如果客户端发送 Accept: text/markdown,Cloudflare 可以抓取你的 HTML 并返回 Markdown 变体。
受此启发,我构建了一个可自行托管的 NGINX 动态模块,在自己的基础设施上实现类似功能。这是一个非常早期的原型,主要用于帮助大家尝试工作流并提供反馈。

仓库:

工作原理

客户端请求头结果
浏览器Accept: text/html原始 HTML
AgentAccept: text/markdownNGINX 将上游 HTML 转换为 Markdown 并返回 text/markdown
  • 不需要对应用进行任何改动;转换完全在反向代理层完成。
  • 最佳使用场景: 文档、博客、新闻、知识库页面。
  • 不适用场景: API、流式响应或需要身份验证的页面(除非你仔细处理缓存)。

Agent 和 LLM 工具通常会抓取完整的 HTML,并在导航栏、页脚、Cookie 横幅、布局标记、脚本以及噪声属性上浪费 token。Markdown 变体可以让下游解析更廉价、更可预测。

安装

# Install the module
curl -sSL https://raw.githubusercontent.com/cnkang/nginx-markdown-for-agents/main/tools/install.sh | sudo bash

# Test and reload NGINX
sudo nginx -t && sudo nginx -s reload

注意: 动态模块必须与您当前的 NGINX 补丁版本(nginx -v)完全匹配。如果没有可用的匹配构建,您可能需要自行编译该模块。

验证 Markdown 变体

# Request Markdown
curl -sD - -o /dev/null -H "Accept: text/markdown" http://localhost:8080/ | grep -iE 'content-type|vary'
# Expected output:
# content-type: text/markdown; charset=utf-8
# vary: Accept

验证 HTML 变体

curl -sD - -o /dev/null -H "Accept: text/html" http://localhost:8080/ | grep -i 'content-type'

示例请求

curl -s -H "Accept: text/markdown" http://localhost:8080/ | head -40

配置

先从小范围开始——先在单一路由上启用过滤器。

load_module modules/ngx_http_markdown_filter_module.so;

http {
    markdown_filter off;

    server {
        listen 8080;

        location /docs/ {
            markdown_filter on;

            # Recommended: avoid upstream compression for clean conversion
            proxy_set_header Accept-Encoding "";

            proxy_pass http://backend;
        }
    }
}

失效打开(推荐用于试用)

如果转换失败,将返回原始 HTML:

markdown_on_error pass;

限制工作量

markdown_max_size 10m;
markdown_timeout 5s;

指标端点(仅限本地主机)

location /markdown-metrics {
    markdown_metrics;
}

缓存注意事项

如果在 NGINX 或 CDN 上进行缓存,请确保通过 Accept 头区分变体:

proxy_cache_key "$scheme$request_method$host$request_uri$http_accept";

注意事项

  • 会存在边缘情况(奇怪的 HTML、超大页面、异常编码)。
  • 模块仅专注于 HTML → Markdown(不处理 PDF 或任意二进制文件)。
  • 缓存需要谨慎处理(变体键 + 鉴权行为)。

如果你遇到页面损坏、页面极慢或缓存问题,请提交 issue,并提供以下信息:

  • 示例 URL(或脱敏后的 HTML)
  • nginx -v 的输出
  • 上游是否开启了压缩
  • 前置的任何缓存/CDN

参考资料

  • Cloudflare 灵感 – 博客:
  • Cloudflare 文档:
  • 项目仓库:
0 浏览
Back to Blog

相关文章

阅读更多 »

当工作成为心理健康风险时

markdown !Ravi Mishrahttps://media2.dev.to/dynamic/image/width=50,height=50,fit=cover,gravity=auto,format=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fu...