#!/bin/bash # 验证 GET 和 HEAD 的缓存头现在一致了 set -u LOCAL=http://127.0.0.1:8080 BASE=https://relay.xxmxxs.top UA='LanRemote/1.8.1' echo "════════ 1. GET vs HEAD 逐路径对比(必须一致)════════" printf " %-38s %-30s %s\n" "路径" "GET" "HEAD" for p in "/" "/favicon.ico" "/shot/pc-main.png" \ "/download/ykxmz-setup-1.8.1.exe" "/v1/health"; do g=$(curl -s -D - -o /dev/null --max-time 15 "$LOCAL$p" 2>/dev/null \ | grep -i '^cache-control' | cut -d' ' -f2- | tr -d '\r') h=$(curl -sI --max-time 15 "$LOCAL$p" 2>/dev/null \ | grep -i '^cache-control' | cut -d' ' -f2- | tr -d '\r') mark="✓" [ "$g" != "$h" ] && mark="✗ 不一致" printf " %-38s %-30s %s %s\n" "$p" "${g:-无}" "${h:-无}" "$mark" done echo echo "════════ 2. HEAD 的下载要报正确的 Content-Length ════════" for f in ykxmz-setup-1.8.1.exe ykxmz-watch-1.8.1.apk; do len=$(curl -sI --max-time 20 "$LOCAL/download/$f" 2>/dev/null \ | grep -i '^content-length' | awk '{print $2}' | tr -d '\r') ctype=$(curl -sI --max-time 20 "$LOCAL/download/$f" 2>/dev/null \ | grep -i '^content-type' | cut -d' ' -f2- | tr -d '\r') printf " %-30s %10s 字节 %s\n" "$f" "${len:-?}" "${ctype:-?}" done echo echo "════════ 3. 走公网 HEAD 也应该报告可缓存 ════════" for p in "/download/ykxmz-setup-1.8.1.exe"; do h=$(curl -sI --max-time 30 -H "User-Agent: $UA" "$BASE$p" 2>/dev/null | tr -d '\r') echo " $p" echo "$h" | grep -iE '^cache-control|^content-length|^cf-cache-status|^content-type' | sed 's/^/ /' done