http.ResponseWriterにHTTPステータスコードを設定する方法


101

HTTPステータスコードをhttp.ResponseWriter(500または403など)に設定するにはどうすればよいですか?

リクエストには通常、ステータスコード200が付加されていることがわかります。

回答:


161

を使用し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

91

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)」ではなく、この答えだけが私にとって有効であるため、たくさん感謝します!
ウィッシュマスター、

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

全リストはこちら


1
ログhttp: superfluous response.WriteHeader call
panchicore

1
後で@panchicoreにしてください。後から見ても明らかではない場合-そして完成させるために-このようなヘッダーは1つしか送信できません。2番目は単なる別の例です。その警告の「余分な」は、最初のものだけを送信する必要があることを単に示しています。
アダムジャック
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.