diff --git a/main.go b/main.go index 2d62ac8..5831d4a 100644 --- a/main.go +++ b/main.go @@ -7,18 +7,42 @@ import ( func main() { mux := http.NewServeMux() + mux.HandleFunc("/api/hello", func(w http.ResponseWriter, r *http.Request) { - // ВАЖНО: Этот заголовок заставляет браузер переключиться на UDP - w.Header().Set("Alt-Svc", `h3=":443"; ma=86400`) - - // CORS (если нужно для Svelte) + // 1. Настройка CORS для работы со Svelte и другими фронтендами w.Header().Set("Access-Control-Allow-Origin", "*") + w.Header().Set("Access-Control-Allow-Methods", "GET, POST, OPTIONS") + w.Header().Set("Access-Control-Allow-Headers", "Content-Type, Authorization") - // Логируем протокол. Traefik v3 передает информацию о QUIC в заголовках - fmt.Printf("Запрос от Traefik. Протокол: %s\n", r.Proto) - w.Write([]byte("Данные переданы через QUIC (UDP) до Traefik!")) + // Если это Preflight-запрос (OPTIONS), просто отвечаем 200 OK + if r.Method == "OPTIONS" { + w.WriteHeader(http.StatusOK) + return + } + + // 2. Логирование для отладки + // Traefik v3 пробрасывает протокол. Проверим также заголовок X-Forwarded-Proto + proto := r.Header.Get("X-Forwarded-Proto") + if proto == "" { + proto = r.Proto + } + + fmt.Printf("Получен запрос. Метод: %s, Протокол: %s, Путь: %s\n", r.Method, proto, r.URL.Path) + + // 3. Ответ клиенту + w.Header().Set("Content-Type", "text/plain; charset=utf-8") + w.WriteHeader(http.StatusOK) + + response := fmt.Sprintf("Привет! Твой запрос обработан через Traefik v3.\nПротокол (внутренний): %s\n", r.Proto) + w.Write([]byte(response)) }) - // Слушаем обычный порт внутри контейнера - http.ListenAndServe(":8080", mux) + // Порт 8080 внутри контейнера + port := ":8080" + fmt.Printf("Сервер запущен на порту %s...\n", port) + + err := http.ListenAndServe(port, mux) + if err != nil { + fmt.Printf("Ошибка при запуске сервера: %s\n", err) + } }