CORS- ja panic-palautusmiddleware
Cross-origin-käytännöt ja panic-tilanteista palautuminen
CORS- ja panic-palautusmiddleware on ilmainen Go Academy-oppitunti CoddyKitissä. Tämä on oppitunti 4/4. Voit lukea tästä oppimispolusta kokonaan mitkä tahansa 3 oppituntia ilmaiseksi — sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä käytännön harjoittelun sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Oppitunti kuuluu Go Academy-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. Go Academy-kurssilla on yhteensä 4 oppituntia.
Mikä CORS on?
Cross-Origin Resource Sharing (CORS) on selaimen suojausmekanismi, joka rajoittaa, mitkä origin-osoitteet voivat tehdä HTTP-pyyntöjä API:inne. Palvelin sallii tämän määrittämällä vastausotsakkeet.
CORS-esitarkistus
Ennen ristiin originien välistä pyyntöä, joka sisältää mukautetun otsakkeen tai muun kuin yksinkertaisen metodin, selain lähettää OPTIONS-esitarkistuspyynnön. Middleware-ohjelmiston on käsiteltävä OPTIONS ja palautettava 200 CORS-otsakkeiden kanssa.
CORS-middleware
Yksinkertainen CORS-middleware kehitystä varten:
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)
})
}Sallitut origin-osoitteet
Älkää käyttäkö Access-Control-Allow-Origin: * -asetusta, kun credentials-tietoja (evästeitä tai Authorization-otsakkeita) käytetään — käyttäkää nimenomaista origin-osoitetta. Tarkistakaa useat origin-osoitteet sallittujen osoitteiden luettelosta.
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
Sallikaa evästeiden ja valtuutusotsakkeiden lähettäminen ristiin originien välillä:
w.Header().Set("Access-Control-Allow-Credentials", "true")rs/cors-kirjasto
Käyttäkää github.com/rs/cors-kirjastoa tuotantotasoiseen CORS-toteutukseen, joka tukee joustavaa originien täsmäytystä, credential-tietoja ja esitarkistuspyyntöjen välimuistia.
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)Panic-palautuksen middleware
Palautukaa panic-tilanteista, jotta palvelin ei kaadu eikä menetä kaikkia aktiivisia yhteyksiä:
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
Tulostakaa koko goroutine-pinonjälki panicin tapahtuessa, jotta perimmäinen syy voidaan selvittää:
import "runtime/debug"
log.Printf("panic: %v\n%s", rec, debug.Stack())Sentry-integraatio
Lähettäkää panicit Sentryyn tai vastaavaan virheiden seurantapalveluun palautuksen middleware-ohjelmistossa ennen kuin palautatte asiakkaalle 500-tilakoodin.
Järjestys: Recovery uloimmaksi
Rekisteröikää Recovery aina uloimmaksi (ensimmäisenä sovellettavaksi) middleware-ohjelmistoksi, jotta se sieppaa kaikkien muiden middleware-ohjelmistojen ja käsittelijöiden aiheuttamat panicit.
handler := Recovery(RequestID(Logger(Auth(mux))))Panic-palautuksen testaaminen
Kirjoittakaa käsittelijä, joka aiheuttaa panicin tarkoituksella, kutsukaa sitä middleware-ohjelmiston kautta httptest-testissä ja varmistakaa, että vastaus on 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)Pikatarkistus
Miksi panic-palautuksen middleware-ohjelmiston on oltava uloimpana kerroksena?
Kertaus: CORS ja panic-palautus
Keskeiset kohdat:
- CORS: määrittäkää Access-Control-Allow-* -otsakkeet ja käsitelkää OPTIONS-esitarkistus
- Allow-Origin: käyttäkää nimenomaista origin-osoitetta, ei *-merkkiä, kun credentials-tietoja käytetään
- Recovery: defer recover() + pinonjäljen lokitus + 500-tilakoodin palautus
- Recovery-middleware-ohjelmiston on oltava uloimpana
Opi Go tekoälytuutorin avulla — ilmaiseksi
Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.
- Kurssit
- 51
- Oppitunnit
- 203
Usein kysytyt kysymykset
Onko oppitunti ”CORS- ja panic-palautusmiddleware” ilmainen?
Kyllä — voit lukea täällä verkossa kokonaan ilmaiseksi mitkä tahansa Go Academy-oppimispolun 3 oppituntia, myös oppitunnin “CORS- ja panic-palautusmiddleware”. Sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä interaktiiviset harjoitukset sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Go Academy-kurssilla on yhteensä 4 oppituntia.
Mitä opin oppitunnilla ”CORS- ja panic-palautusmiddleware”?
Cross-origin-käytännöt ja panic-tilanteista palautuminen Harjoittelet Go Academy-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.
Tarvitsenko kokemusta aloittaakseni Go Academy-opiskelun?
Aiempi kokemus ei ole tarpeen. CoddyKitin Go Academy-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 4/4.
Kuinka kauan ”CORS- ja panic-palautusmiddleware”-oppitunnin suorittaminen kestää?
Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.
Voinko kirjoittaa ja suorittaa koodia tällä Go Academy-oppitunnilla?
Kyllä. Jokainen Go Academy-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.
Kaikki tämän kurssin oppitunnit
- HTTP-middlewareketjun perusteet
- Lokitus ja request ID -middleware
- Todennus- ja nopeusrajoitusmiddleware
- CORS- ja panic-palautusmiddleware