วิธีตั้งรหัสสถานะ HTTP บน http.ResponseWriter


107

ฉันจะตั้งรหัสสถานะ HTTP บนhttp.ResponseWriter(เช่น 500 หรือ 403) ได้อย่างไร

ฉันเห็นว่าโดยปกติแล้วคำขอจะมีรหัสสถานะ 200 แนบอยู่

คำตอบ:


180

ใช้http.ResponseWriter.WriteHeader. จากเอกสารประกอบ:

WriteHeader ส่งส่วนหัวการตอบกลับ HTTP พร้อมรหัสสถานะ หากไม่ได้เรียก WriteHeader อย่างชัดเจนการเรียกเขียนครั้งแรกจะเรียกใช้ WriteHeader โดยปริยาย (http.StatusOK) ดังนั้นการโทรไปยัง WriteHeader อย่างชัดเจนส่วนใหญ่จะใช้ในการส่งรหัสข้อผิดพลาด

ตัวอย่าง:

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

1
คุณจะเข้าถึงส่วนหัวที่เขียนไว้ในมิดเดิลแวร์ได้อย่างไร res.Header () รับ ('StatusCode') ให้ศูนย์
kailash yogeshwar

101

นอกเหนือจากWriteHeader(int)คุณสามารถใช้วิธีการช่วยเหลือhttp.Errorตัวอย่างเช่น:

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 () และhttp.StatusText ()เป็นเพื่อนของคุณ


ฉันไม่รู้ว่าทำไม แต่คำตอบนี้ใช้ได้กับฉันไม่ใช่ "WriteHeader (int)" ดังนั้นขอบคุณมาก!
Wishmaster

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

รายการทั้งหมดที่นี่


2
มันบันทึกhttp: superfluous response.WriteHeader call
panchicore

3
เฮ้ @panchicore ในกรณีที่ไม่ชัดเจนในการมองย้อนกลับ - และเพื่อให้เสร็จสมบูรณ์คุณสามารถส่งส่วนหัวดังกล่าวได้เพียงส่วนเดียวส่วนที่สองเป็นเพียงตัวอย่างที่แตกต่างกัน "ฟุ่มเฟือย" ในคำเตือนนั้นเพียงระบุว่าควรส่งเฉพาะคำเตือนแรกเท่านั้น
Adam Jack
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.