From a7753f90d500c9079f6c828664c69df179ae154a Mon Sep 17 00:00:00 2001 From: wood chen Date: Wed, 13 Nov 2024 18:24:48 +0800 Subject: [PATCH] feat(internal/handler): add CORS support and handle OPTIONS requests in MirrorProxyHandler --- internal/handler/mirror_proxy.go | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/internal/handler/mirror_proxy.go b/internal/handler/mirror_proxy.go index 19779da..a8aacfb 100644 --- a/internal/handler/mirror_proxy.go +++ b/internal/handler/mirror_proxy.go @@ -19,6 +19,22 @@ func NewMirrorProxyHandler() *MirrorProxyHandler { func (h *MirrorProxyHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) { startTime := time.Now() + // 设置 CORS 头 + w.Header().Set("Access-Control-Allow-Origin", "*") + w.Header().Set("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS, HEAD, PATCH") + w.Header().Set("Access-Control-Allow-Headers", "*") + // 如果需要允许发送凭证(cookies等),可以设置: + // w.Header().Set("Access-Control-Allow-Credentials", "true") + + // 处理 OPTIONS 请求(预检请求) + if r.Method == "OPTIONS" { + w.WriteHeader(http.StatusOK) + log.Printf("| %-6s | %3d | %12s | %15s | %10s | %-30s | CORS Preflight", + r.Method, http.StatusOK, time.Since(startTime), + utils.GetClientIP(r), "-", r.URL.Path) + return + } + // 从路径中提取实际URL // 例如:/mirror/https://example.com/path 变成 https://example.com/path actualURL := strings.TrimPrefix(r.URL.Path, "/mirror/")