From 9c52856af62074e51f125a90b4153fab61a13b00 Mon Sep 17 00:00:00 2001 From: Mike O'Driscoll Date: Fri, 16 May 2025 12:51:07 -0400 Subject: [PATCH] prober: correct content-type response (#15989) Content-type was responding as test/plain for probes accepting application/json. Set content type header before setting the response code to correct this. Updates tailscale/corp#27370 Signed-off-by: Mike O'Driscoll --- prober/prober.go | 2 +- prober/prober_test.go | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/prober/prober.go b/prober/prober.go index 4bd522f26..1237611f4 100644 --- a/prober/prober.go +++ b/prober/prober.go @@ -559,8 +559,8 @@ func (p *Prober) RunHandler(w http.ResponseWriter, r *http.Request) error { PreviousSuccessRatio: prevInfo.RecentSuccessRatio(), PreviousMedianLatency: prevInfo.RecentMedianLatency(), } - w.WriteHeader(respStatus) w.Header().Set("Content-Type", "application/json") + w.WriteHeader(respStatus) if err := json.NewEncoder(w).Encode(resp); err != nil { return tsweb.Error(http.StatusInternalServerError, "error encoding JSON response", err) } diff --git a/prober/prober_test.go b/prober/prober_test.go index 109953b65..c90557eff 100644 --- a/prober/prober_test.go +++ b/prober/prober_test.go @@ -598,6 +598,9 @@ func TestProberRunHandler(t *testing.T) { } if reqJSON { + if w.Header().Get("Content-Type") != "application/json" { + t.Errorf("unexpected content type: got %q, want application/json", w.Header().Get("Content-Type")) + } var gotJSON RunHandlerResponse if err := json.Unmarshal(w.Body.Bytes(), &gotJSON); err != nil { t.Fatalf("failed to unmarshal JSON response: %v; body: %s", err, w.Body.String())