Middleware CORS i odzyskiwania po panic
Zasady międzyźródłowe i odzyskiwanie po panic
Middleware CORS i odzyskiwania po panic to bezpłatna lekcja Go Academy na CoddyKit. To lekcja 4 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Go Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Go Academy zawiera 4 lekcji w sumie.
Czym jest CORS?
Cross-Origin Resource Sharing (CORS) to mechanizm bezpieczeństwa przeglądarki, który ogranicza źródła mogące wykonywać żądania HTTP do interfejsu API. Serwer zezwala na takie żądania, ustawiając nagłówki odpowiedzi.
Żądanie wstępne CORS
Przed żądaniem między źródłami zawierającym niestandardowy nagłówek lub metodę inną niż prosta przeglądarka wysyła żądanie wstępne OPTIONS. Middleware musi obsługiwać OPTIONS i zwracać 200 wraz z nagłówkami CORS.
Middleware CORS
Proste middleware CORS na potrzeby programowania:
func CORS(next http.Handler) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Access-Control-Allow-Origin", "https://myapp.com")
w.Header().Set("Access-Control-Allow-Methods", "GET,POST,PUT,DELETE,OPTIONS")
w.Header().Set("Access-Control-Allow-Headers", "Authorization,Content-Type")
if r.Method == http.MethodOptions {
w.WriteHeader(http.StatusOK); return
}
next.ServeHTTP(w, r)
})
}Dozwolone źródła
Nie należy używać Access-Control-Allow-Origin: *, gdy uwierzytelnianie obejmuje dane cookie lub nagłówki Authorization — należy użyć jawnie określonego źródła. W przypadku wielu źródeł należy sprawdzać je względem białej listy.
allowedOrigins := map[string]bool{
"https://app.example.com": true,
"https://dev.example.com": true,
}
if allowedOrigins[r.Header.Get("Origin")] {
w.Header().Set("Access-Control-Allow-Origin", r.Header.Get("Origin"))
}Access-Control-Allow-Credentials
Należy zezwolić na wysyłanie danych cookie i nagłówków autoryzacji między źródłami:
w.Header().Set("Access-Control-Allow-Credentials", "true")Biblioteka rs/cors
Należy użyć biblioteki github.com/rs/cors w środowisku produkcyjnym, aby uzyskać CORS z elastycznym dopasowywaniem źródeł, obsługą danych uwierzytelniających i buforowaniem żądań wstępnych.
c := cors.New(cors.Options{
AllowedOrigins: []string{"https://example.com"},
AllowedMethods: []string{"GET","POST","PUT","DELETE"},
AllowedHeaders: []string{"Authorization","Content-Type"},
AllowCredentials: true,
})
handler := c.Handler(mux)Middleware odzyskiwania po panice
Należy odzyskiwać działanie po panikach, aby zapobiec awarii serwera i utracie wszystkich aktywnych połączeń:
func Recovery(next http.Handler) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
defer func() {
if rec := recover(); rec != nil {
log.Printf("panic: %v\n%s", rec, debug.Stack())
http.Error(w, "Internal Server Error", 500)
}
}()
next.ServeHTTP(w, r)
})
}runtime/debug.Stack
Należy wyświetlać pełny ślad stosu goroutines po wystąpieniu paniki, aby ułatwić zdiagnozowanie jej głównej przyczyny:
import "runtime/debug"
log.Printf("panic: %v\n%s", rec, debug.Stack())Integracja z Sentry
W middleware odzyskiwania należy wysyłać paniki do Sentry lub podobnych usług śledzenia błędów przed zwróceniem klientowi kodu 500.
Kolejność: Recovery na zewnątrz
Należy zawsze rejestrować Recovery jako middleware znajdujące się najbardziej na zewnątrz (stosowane jako pierwsze), aby przechwytywało paniki ze wszystkich pozostałych middleware i handlerów.
handler := Recovery(RequestID(Logger(Auth(mux))))Testowanie odzyskiwania po panice
Należy napisać handler, który celowo wywołuje panikę, wywołać go przez middleware w ramach httptest i sprawdzić, czy odpowiedź ma kod 500.
panicHandler := http.HandlerFunc(func(_ http.ResponseWriter, _ *http.Request) { panic("test") })
w := httptest.NewRecorder()
Recovery(panicHandler).ServeHTTP(w, httptest.NewRequest("GET", "/", nil))
assert.Equal(t, 500, w.Code)Szybkie sprawdzenie
Dlaczego middleware odzyskiwania po panice musi być warstwą znajdującą się najbardziej na zewnątrz?
Podsumowanie: CORS i odzyskiwanie po panice
Najważniejsze informacje:
- CORS: ustawiać nagłówki Access-Control-Allow-*; obsługiwać żądania wstępne OPTIONS
- Allow-Origin: używać jawnie określonego źródła, a nie *, gdy uwierzytelnianie obejmuje dane cookie
- Recovery: defer recover() + rejestrować ślad stosu + zwracać 500
- Recovery musi być middleware znajdującym się najbardziej na zewnątrz
Często zadawane pytania
Czy lekcja „Middleware CORS i odzyskiwania po panic” jest bezpłatna?
Tak — pełny tekst „Middleware CORS i odzyskiwania po panic” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Go Academy, przejdź na CoddyKit PRO. Kurs Go Academy zawiera 4 lekcji w sumie.
Co nauczysz się w „Middleware CORS i odzyskiwania po panic”?
Zasady międzyźródłowe i odzyskiwanie po panic Ćwiczysz Go Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć Go Academy?
Nie wymagamy żadnego doświadczenia. Go Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 4 z 4.
Ile czasu zajmuje lekcja „Middleware CORS i odzyskiwania po panic”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji Go Academy?
Tak. Każda lekcja Go Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.
Wszystkie lekcje w tym kursie
- Podstawy łańcucha middleware HTTP
- Middleware logowania i identyfikatora żądania
- Middleware uwierzytelniania i limitowania ruchu
- Middleware CORS i odzyskiwania po panic