一个使用 Express 演示新 HTTP 方法 QUERY(RFC 10008)的示例应用,该方法结合了 GET 的安全性与可缓存性以及 POST 的携带请求体能力,用于实现复杂、可缓存的查询。

Stars

38

7 天增长

暂无数据

Fork 数

7

开放 Issue

0

开源协议

暂无数据

最近更新

2026-06-26

AI 仓库情报摘要
FR-AI / ANALYSIS

为什么值得关注

它通过实现新的 QUERY 方法并与 GET 和 POST 进行并列比较,解决了 API 设计中的长期痛点——让过滤/搜索端点既支持丰富表达(JSON 主体)又可缓存(类似 GET)。

适合谁使用

  • 设计 REST API 搜索/过滤端点的后端开发者
  • 对 HTTP 协议演进感兴趣的 Node.js/Express 开发者
  • 评估只读查询缓存策略的 API 架构师
  • 关注即将到来的 HTTP 标准与 RFC 的开发者

典型使用场景

  • 将基于 POST 的搜索 API 替换为可缓存的 QUERY,以提升性能并减少数据库负载
  • 使用嵌套 JSON 对象实现复杂过滤,同时保持响应可被 CDN 和代理缓存
  • 演示 GET 查询字符串的局限性,论证在内部或外部 API 中采用 QUERY 的合理性

项目优势

  • 提供清晰的三方比较(GET、POST、QUERY),使用相同的过滤逻辑和缓存头部
  • 包含可运行的 Express 5 服务器,带有内存缓存、TTL 和 X-Cache 头部,方便验证行为
  • 提供多种测试方式:浏览器 UI、curl 命令、REST Client 请求以及自动化演示脚本
  • 深入解释技术原理,包括 URL 长度限制、编码问题和日志风险

使用前须知

  • 客户端浏览器对 fetch 中 QUERY 的支持尚未普及,演示中包含了 try/catch 回退
  • 浏览器 HTTP 缓存目前仅缓存 GET/HEAD;服务器端缓存正常工作,但 CDN 缓存仍在演进中
  • 需要 Node 26 及以上版本和 Express 5,不兼容较老的 Node.js 版本或 Express 4

README 快速开始

QUERY · el nuevo método HTTP (RFC 10008)

Demo en Express del mismo endpoint servido con GET, POST y el nuevo método QUERY, para ver de un vistazo qué aporta y por qué importa la caché.

QUERY acaba de pasar a Proposed Standard. La idea en una frase:

QUERY = la seguridad y la cacheabilidad de GET + la capacidad de mandar un body de POST.

  • ✅ Como GET: es un método seguro (no modifica el recurso) → la respuesta se puede cachear.
  • ✅ Como POST: puede llevar body, así que mandas un JSON con filtros complejos.
  • ✅ Lo que ninguno de los dos te da solo: mandar un JSON Y poder cachear la respuesta.

Enlaces:


El problema: GET vs POST para filtrar datos

Imagina un buscador de productos con filtros: categorías, rango de precio, rating, orden…

Opción A — GET con query string

GET /api/products/search?categories=laptop,phone&priceMin=800&priceMax=1500&minRating=4.5&sortBy=price&sortOrder=desc
  • 👍 Es cacheable por defecto (navegador, CDN, proxies).
  • 👎 Todo es texto: hay que castear números y booleanos a mano en el server.
  • 👎 Los filtros complejos o anidados (un array de objetos, condiciones OR/AND) no caben bien en una URL.
  • 👎 Límite de longitud de URL y los parámetros acaban en logs (peor para datos sensibles).

¿Cuánto puede llegar a medir una URL en GET? (límites reales)

No hay un límite único universal.

A nivel de estándar HTTP, no se define una longitud máxima estricta para una URI. Lo que sí recomienda RFC 9110 es que clientes y servidores soporten al menos 8000 octetos en URIs dentro de elementos del protocolo.

En la práctica:

ContextoLímite recomendable
Máxima compatibilidad≤ 2.000 caracteres
Apps modernas controladas≤ 8.000 bytes aprox.
Sitemap SEO≤ 2.048 caracteres por URL
Apache por defecto8190 bytes en la request line
Nginx por defectoalrededor de 8K para la request line, según buffer

Mi recomendación práctica:

项目描述

Mismo endpoint con GET, POST y el nuevo método HTTP QUERY (RFC 10008) en Express

相关仓库与替代方案

根据分类、Topic 和编程语言匹配的相似项目。

ddosi
精选
ddosi GitHub avatar

PacketLens

PacketLens is a pure front-end, offline pcap analysis tool that runs entirely in the browser, supporting deep protocol decoding, HTTPS decryption, and million-packet instant loading without any backend.

HTML
19
ViffyGwaanl
精选
ViffyGwaanl GitHub avatar

kimi-k3-learn

An interactive learning system that turns the 47-page Kimi K3 technical report into a single offline HTML file with running algorithms, 3D visualizations, spaced repetition quizzes, and a smart highlighting QA tool.

AI 与机器学习
15
iamtechartist
精选
iamtechartist GitHub avatar

human-cell-visualizer

An interactive 3D visualization of three human cell types using Three.js, WebGL particles, and custom GLSL shaders, allowing users to rotate, zoom, morph, and explore annotated structures.

设计与创意
13