Http.ResponseWriter'da HTTP durum kodu nasıl ayarlanır


102

HTTP durum kodunu bir üzerinde nasıl ayarlarım http.ResponseWriter(ör. 500 veya 403'e)?

Normalde isteklerin kendilerine eklenen 200 durum koduna sahip olduğunu görebiliyorum.

Yanıtlar:


172

Kullanın http.ResponseWriter.WriteHeader. Belgelerden:

WriteHeader, durum kodu içeren bir HTTP yanıt başlığı gönderir. WriteHeader açıkça çağrılmazsa, Write'a yapılan ilk çağrı örtük bir WriteHeader'ı (http.StatusOK) tetikler. Bu nedenle WriteHeader'a yapılan açık çağrılar çoğunlukla hata kodlarını göndermek için kullanılır.

Misal:

func ServeHTTP(w http.ResponseWriter, r *http.Request) {
    w.WriteHeader(http.StatusInternalServerError)
    w.Write([]byte("500 - Something bad happened!"))
}

Ara yazılımın içine yazılan başlığa nasıl erişebilirsiniz? res.Header (). Get ('DurumKodu') sıfır verir.
kailash yogeshwar

98

WriteHeader(int)Sizin dışında, örneğin http.Error yardımcı yöntemini de kullanabilirsiniz :

func yourFuncHandler(w http.ResponseWriter, r *http.Request) {

    http.Error(w, "my own error message", http.StatusForbidden)

    // or using the default message error

    http.Error(w, http.StatusText(http.StatusNotFound), http.StatusNotFound)
}

http.Error () ve http.StatusText () yöntemleri arkadaşlarınızdır


Nedenini bilmiyorum, ama sadece bu cevap benim için çalışıyor, "WriteHeader (int)" değil, bu yüzden çok teşekkürler!
Wishmaster

32
w.WriteHeader(http.StatusInternalServerError)
w.WriteHeader(http.StatusForbidden)

tam liste burada


2
it logshttp: superfluous response.WriteHeader call
panchicore

2
Hey @panchicore, geriye dönüp bakıldığında bariz olmaması durumunda - ve tamamlanması için - sadece böyle bir başlık gönderebilirsiniz, ikincisi sadece farklı bir örnekti. Bu uyarıdaki "gereksiz", yalnızca ilkinin gönderilmesi gerektiğini belirtir.
Adam Jack
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.