http.ResponseWriter에서 HTTP 상태 코드를 설정하는 방법


102

에 HTTP 상태 코드를 어떻게 설정합니까 http.ResponseWriter(예 : 500 또는 403)?

일반적으로 요청에 200의 상태 코드가 첨부되어 있음을 알 수 있습니다.

답변:


165

사용 http.ResponseWriter.WriteHeader. 문서에서 :

WriteHeader는 상태 코드와 함께 HTTP 응답 헤더를 보냅니다. WriteHeader가 명시 적으로 호출되지 않은 경우 Write에 대한 첫 번째 호출은 암시 적 WriteHeader (http.StatusOK)를 트리거합니다. 따라서 WriteHeader에 대한 명시 적 호출은 주로 오류 코드를 보내는 데 사용됩니다.

예:

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

엔 클로징 미들웨어로 작성된 헤더에 어떻게 액세스 할 수 있습니까? res.Header (). Get ( 'StatusCode')는 nil을 제공합니다.
kailash yogeshwar

92

이외에도 http.ErrorWriteHeader(int) 도우미 메서드를 사용할 수 있습니다. 예를 들면 다음과 같습니다.

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 2019-04-05

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

여기에 전체 목록


2
그것은 기록http: superfluous response.WriteHeader call
panchicore

2
헤이 @panchicore가 뒤늦게 명확하지 않은 경우를 대비하여 완료를 위해 이러한 헤더를 하나만 보낼 수 있으며 두 번째는 다른 예였습니다. 그 경고의 "불필요한"은 단지 첫 번째 만 보내야한다는 것을 의미합니다.
Adam Jack
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.