1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
[]
= "errserve"
= "0.10.0"
= "2024"
= "Servidor de páginas de error para Traefik que devuelve el código de error real"
= "MIT"
= ["Lorenzo Carbonell <lorenzo.carbonell.cerezo@gmail.com>"]
= "https://github.com/atareao/errserve"
= "README.md"
= ["http-server", "error-pages", "traefik", "reverse-proxy", "axum"]
= ["command-line-utilities", "network-programming", "web-programming::http-server"]
= ["/openspec", "/.github", "/AGENTS.md", "/cliff.toml", "/deny.toml", "/.justfile"]
# Versiones elegidas contra la caché local de `~/.cargo/registry` (rangos caret,
# sin fijar de memoria): axum 0.8.9, tokio 1.54.1, tower-http 0.6.11,
# tracing 0.1.44, tracing-subscriber 0.3.23, serde 1.0.229, serde_json 1.0.154,
# percent-encoding 2.3.2, tower 0.5.3 y http-body-util 0.1.5.
#
# `percent-encoding` ya estaba en el árbol de forma transitiva (vía `tower-http`,
# que lo usa para decodificar el path en `ServeDir`); se declara ahora como
# dependencia directa porque `src/path.rs` lo usa para normalizar el path con el
# **mismo** decodificador que el servidor de ficheros.
#
# Features añadidas por el change `release-hardening`, verificadas contra la
# caché local antes de fijarlas (el repo compila sin red, `cargo --offline`):
#
# - `tower-http/compression-gzip`: la capa de compresión gzip que pide el
# requisito "La respuesta se comprime cuando el cliente la pide". La feature
# arrastra `async-compression` (caché: 0.4.50) que, con su feature `gzip`,
# arrastra a su vez `compression-codecs/gzip` -> `flate2` (caché: 1.1.10, con
# backend `rust_backend`/`miniz_oxide`, sin `libz-sys` ni compilador de C).
# No se añade `compression-full` ni otras codificaciones: solo gzip, que es
# lo que la spec exige.
# - `tracing-subscriber/json`: la salida estructurada de `LOG_FORMAT=json`.
# Depende solo de `serde_json`, que ya está en el árbol.
# - `flate2` en `[dev-dependencies]`: **no** por lo anterior, sino para que las
# pruebas **descompriman** el cuerpo con gzip y lo comparen con el de la
# respuesta en claro. Sin ella, una prueba solo podría mirar la cabecera
# `Content-Encoding` y no que el cuerpo comprimido sea el de verdad; el mismo
# `flate2` que usa el código en compilación normal evita divergencias entre lo
# que el servidor comprime y lo que la prueba descomprime.
[]
= { = "0.8", = ["tokio"] }
= { = "1", = ["full"] }
= { = "0.6", = ["fs", "trace", "compression-gzip"] }
= "0.1"
= { = "0.3", = ["env-filter", "json"] }
= { = "1", = ["derive"] }
= "1"
= "2"
[]
= { = "0.5", = ["util"] }
= "0.1"
= "1"