Go Academy · Ders

CORS ve Panic Kurtarma Ara Katmanı

Kaynaklar arası ilkeler ve panic durumundan kurtarma

4. ders / 413 adım

CORS ve Panic Kurtarma Ara Katmanı, CoddyKit'te ücretsiz bir Go Academy dersidir. Bu, 4 dersinin 4. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Go Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Go Academy kursu toplamda 4 dersten oluşur.

CORS nedir

Çapraz Kaynak Paylaşımı (CORS), hangi kaynakların API'nize HTTP istekleri gönderebileceğini kısıtlayan bir tarayıcı güvenlik mekanizmasıdır. Sunucu, yanıt üst bilgilerini ayarlayarak buna izin verir.

CORS ön denetimi

Özel bir üst bilgi veya basit olmayan bir yöntem içeren çapraz kaynaklı bir istekten önce tarayıcı, OPTIONS ön denetim isteği gönderir. Ara yazılımınız OPTIONS isteğini işlemeli ve CORS üst bilgileriyle birlikte 200 döndürmelidir.

CORS ara yazılımı

Geliştirme için basit bir CORS ara yazılımı:

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)
    })
}

İzin verilen kaynaklar

Kimlik bilgileri (çerezler, Authorization üst bilgileri) kullanılırken Access-Control-Allow-Origin: * kullanmayın; açık bir kaynak kullanın. Birden çok kaynak için bunları bir izin verilenler listesine karşı denetleyin.

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

Çerezlerin ve yetkilendirme üst bilgilerinin çapraz kaynaklı olarak gönderilmesine izin verin:

w.Header().Set("Access-Control-Allow-Credentials", "true")

rs/cors kitaplığı

Esnek kaynak eşleştirme, kimlik bilgisi desteği ve ön denetim önbelleğe alması sağlayan, üretim kullanıma uygun CORS için github.com/rs/cors kitaplığını kullanın.

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)

Panik kurtarma ara yazılımı

Sunucunun çökmesini ve etkin tüm bağlantıları kaybetmesini önlemek için paniklerden kurtulun:

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

Kök nedeni tanılamaya yardımcı olmak için panik oluştuğunda goroutine yığın izlemesinin tamamını yazdırın:

import "runtime/debug"
log.Printf("panic: %v\n%s", rec, debug.Stack())

Sentry tümleştirmesi

İstemciye 500 döndürmeden önce kurtarma ara yazılımının içinde panikleri Sentry'ye veya benzer hata izleme hizmetlerine gönderin.

Sıralama: Recovery en dışta

Tüm diğer ara yazılımlardaki ve işleyicilerdeki panikleri yakalayabilmesi için Recovery'yi her zaman en dıştaki (ilk uygulanan) ara yazılım olarak kaydedin.

handler := Recovery(RequestID(Logger(Auth(mux))))

Panik kurtarmayı sınama

Kasıtlı olarak panikleyen bir işleyici yazın, bunu bir httptest içinde ara yazılım üzerinden çağırın ve yanıtın 500 olduğunu doğrulayın.

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)

Hızlı kontrol

Panik kurtarma ara yazılımı neden en dış katman olmalıdır?

Özet: CORS ve panik kurtarma

Ana noktalar:

  • CORS: Access-Control-Allow-* üst bilgilerini ayarlayın; OPTIONS ön denetimini işleyin
  • Kimlik bilgileri kullanıldığında Allow-Origin: * yerine açık bir kaynak kullanın
  • Recovery: defer recover() + yığın izlemesini günlüğe kaydetme + 500 döndürme
  • Recovery en dıştaki ara yazılım olmalıdır
Başlamak ücretsiz

Yapay zeka eğitmeniyle Go öğren — ücretsiz

Tarayıcında gerçek kod yaz ve çalıştır, 7/24 yapay zeka eğitmeninden anında yardım al; web'de ya da uygulamada kaldığın yerden devam et.

Kurslar
51
Dersler
203

Sıkça Sorulan Sorular

“CORS ve Panic Kurtarma Ara Katmanı” dersi ücretsiz mi?

Evet — “CORS ve Panic Kurtarma Ara Katmanı” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Go Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Go Academy kursu toplamda 4 dersten oluşur.

“CORS ve Panic Kurtarma Ara Katmanı” dersinde ne öğreneceğim?

Kaynaklar arası ilkeler ve panic durumundan kurtarma Go Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.

Go Academy öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te Go Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 4. dersidir.

“CORS ve Panic Kurtarma Ara Katmanı” dersi ne kadar sürer?

Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.

Bu Go Academy dersinde kod yazıp çalıştırabilir miyim?

Evet. Her Go Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.

Bu kursun tüm dersleri

  1. HTTP Ara Katman Zincirinin Temelleri
  2. Günlükleme ve İstek Kimliği Ara Katmanı
  3. Kimlik Doğrulama ve Hız Sınırlama Ara Katmanı
  4. CORS ve Panic Kurtarma Ara Katmanı
← Go Academy Sayfasına Dön