# Image Hosting Workaround — files.gdcjgk.net 403

## Problem

`files.gdcjgk.net` consistently returns Cloudflare edge 403 (`server: cloudflare`, `cf-ray` header in response) while `rss.gdcjgk.net` works fine through the same `cloudflared` tunnel. Other tunnel domains (rss, callback, bot) are unaffected.

### Diagnostic signals
```bash
# files.gdcjgk.net — BROKEN
curl -s https://files.gdcjgk.net/teacher_essay.png
# → <html><head><title>403 Forbidden</title></head>...
# → server: cloudflare (NOT nginx on our machine)

# rss.gdcjgk.net — WORKS
curl -s -o /dev/null -w "%{http_code}" https://rss.gdcjgk.net/
# → 200
```

### Root cause
Cloudflare DNS proxy/WAF configuration for the `files.gdcjgk.net` subdomain — not a tunnel connectivity issue. Restarting `cloudflared` does NOT fix it.

## Workaround: rss.gdcjgk.net/static/

The we-mp-rss FastAPI server serves static files from `/home/ubuntu/project/we-mp-rss-main/static/` and is accessible via `rss.gdcjgk.net`.

### Steps

1. Copy image to we-mp-rss static directory:
```bash
cp /path/to/image.png /home/ubuntu/project/we-mp-rss-main/static/image_name.png
```

2. Verify locally:
```bash
curl -s -o /dev/null -w "%{http_code}" http://localhost:8001/static/image_name.png
# → 200
```

3. Verify publicly:
```bash
curl -s -o /dev/null -w "%{http_code}" https://rss.gdcjgk.net/static/image_name.png
# → 200
```

4. Provide user with URL and embed code:
```html
<img src="https://rss.gdcjgk.net/static/image_name.png" 
     alt="描述" 
     style="max-width:100%; border-radius:8px; margin:16px 0;">
```

## Related: HTTP server on 8088 hang

Python's `http.server` on port 8088 (serving `~/.hermes/`) can silently hang — process visible in `ps aux` but returns "Empty reply from server":
```bash
curl http://localhost:8088/anything
# curl: (52) Empty reply from server
```

Fix:
```bash
ps aux | grep 'http.server 8088' | grep -v grep | awk '{print $2}' | xargs kill
sleep 1
cd ~/.hermes && python3 -m http.server 8088 --bind 0.0.0.0  # use background=true in Hermes
```

## Session reference

2026-07-01 session: CaoXiaoFen couldn't find image promised in previous (reset) session. HTTP server on 8088 was hung since Jun 26. `files.gdcjgk.net` returned 403 even after tunnel restart. Workaround: copied `teacher_essay.png` to we-mp-rss static dir, served via `https://rss.gdcjgk.net/static/teacher_essay.png`.
