Middleware CORS dan Pemulihan Panic
Dasar silang asal dan pemulihan daripada panic
Middleware CORS dan Pemulihan Panic ialah pelajaran Go Academy percuma di CoddyKit. Ini ialah pelajaran 4 daripada 4. Sebanyak 3 pelajaran dalam laluan pembelajaran ini boleh dibaca sepenuhnya secara percuma — selepas itu, CoddyKit PRO membuka akses kepada semua pelajaran, serta latihan praktikal dengan penyunting kod terbina dalam dan tutor kecerdasan buatan yang tersedia 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran Go Academy, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus Go Academy merangkumi sejumlah 4 pelajaran.
Apakah CORS?
Cross-Origin Resource Sharing (CORS) ialah mekanisme keselamatan pelayar yang mengehadkan asal yang boleh membuat permintaan HTTP kepada API anda. Pelayan memberikan keizinan dengan menetapkan pengepala respons.
Prapenerbangan CORS
Sebelum permintaan silang asal dengan pengepala tersuai atau kaedah bukan ringkas, pelayar menghantar prapenerbangan OPTIONS. Middleware anda mesti mengendalikan OPTIONS dan mengembalikan 200 bersama pengepala CORS.
Middleware CORS
Middleware CORS ringkas untuk pembangunan:
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)
})
}Asal yang dibenarkan
Jangan gunakan Access-Control-Allow-Origin: * apabila kelayakan (kuki, pengepala Authorization) terlibat — gunakan asal yang dinyatakan secara jelas. Semak asal terhadap senarai benarkan untuk berbilang asal.
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
Benarkan kuki dan pengepala pengesahan dihantar merentas asal:
w.Header().Set("Access-Control-Allow-Credentials", "true")Pustaka rs/cors
Gunakan pustaka github.com/rs/cors untuk CORS bertaraf pengeluaran dengan pemadanan asal yang fleksibel, sokongan kelayakan dan caching prapenerbangan.
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 pemulihan panik
Pulihkan daripada panik untuk mengelakkan pelayan ranap dan kehilangan semua sambungan aktif:
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
Cetak jejak tindanan goroutine penuh apabila panik berlaku untuk membantu mendiagnosis punca utama:
import "runtime/debug"
log.Printf("panic: %v\n%s", rec, debug.Stack())Integrasi Sentry
Hantar panik kepada Sentry atau perkhidmatan penjejakan ralat yang serupa dalam middleware pemulihan sebelum mengembalikan 500 kepada klien.
Susunan: Recovery paling luar
Sentiasa daftarkan Recovery sebagai middleware paling luar (yang digunakan dahulu) supaya ia menangkap panik daripada semua middleware dan pengendali lain.
handler := Recovery(RequestID(Logger(Auth(mux))))Menguji pemulihan panik
Tulis pengendali yang sengaja mencetuskan panik, panggilnya melalui middleware dalam httptest dan tegaskan bahawa respons ialah 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)Semakan Pantas
Mengapakah middleware pemulihan panik mesti berada pada lapisan paling luar?
Imbas Kembali: CORS dan Pemulihan Panik
Isi penting:
- CORS: tetapkan pengepala Access-Control-Allow-*; kendalikan prapenerbangan OPTIONS
- Allow-Origin: gunakan asal yang dinyatakan secara jelas (bukan *) apabila kelayakan terlibat
- Pemulihan: defer recover() + log jejak tindanan + kembalikan 500
- Pemulihan mesti menjadi middleware paling luar
Pelajari Go dengan tutor kecerdasan buatan — percuma
Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.
- Kursus
- 51
- Pelajaran
- 203
Soalan Lazim
Adakah pelajaran “Middleware CORS dan Pemulihan Panic” percuma?
Ya — sebanyak 3 pelajaran dalam laluan pembelajaran Go Academy, termasuk “Middleware CORS dan Pemulihan Panic”, boleh dibaca sepenuhnya secara percuma di web ini. Selepas itu, CoddyKit PRO membuka akses kepada semua pelajaran, serta latihan interaktif dengan penyunting kod terbina dalam dan tutor kecerdasan buatan yang tersedia 24/7. Kursus Go Academy merangkumi sejumlah 4 pelajaran.
Apakah yang akan saya pelajari dalam “Middleware CORS dan Pemulihan Panic”?
Dasar silang asal dan pemulihan daripada panic Anda berlatih Go Academy menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.
Adakah saya memerlukan pengalaman untuk memulakan Go Academy?
Tiada pengalaman terdahulu diperlukan. Pembelajaran Go Academy di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 4 daripada 4.
Berapa lamakah pelajaran “Middleware CORS dan Pemulihan Panic” diambil?
Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.
Bolehkah saya menulis dan menjalankan kod dalam pelajaran Go Academy ini?
Ya. Setiap pelajaran Go Academy menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.
Semua pelajaran dalam kursus ini
- Asas Rantaian Middleware HTTP
- Middleware Logging dan ID Permintaan
- Middleware Pengesahan dan Had Kadar
- Middleware CORS dan Pemulihan Panic