2016-09-10 11 views
5

Nie jestem pewien, czy jest to błąd, czy też powinien działać pakiet odpowiedzi HTTP.nagłówki odpowiedzi HTTP golang są usuwane

W tym przykładzie nagłówek Content-Type odpowiedź nie zostanie ustawiony

// Return the response 
w.WriteHeader(http.StatusCreated) 
w.Header().Set("Content-Type", "application/json") 
w.Write(js) 

Jak zawsze, jeśli odwrócić kolejność jak nagłówki są ustawione to działa:

// Return the response 
w.Header().Set("Content-Type", "application/json") 
w.WriteHeader(http.StatusCreated) 
w.Write(js) 

Teraz będzie to rzeczywista ustaw nagłówek na application/json. Czy to zachowanie jest zamierzone?

Odpowiedz

10

Nagłówki można zapisać tylko raz, dlatego musisz ustawić wszystkie nagłówki przed ich zapisaniem. Po zapisaniu nagłówków są wysyłane do klienta.

Po ustawieniu wszystkich nagłówków należy zadzwonić pod numer w.WriteHeader(http.StatusCreated).

Read in the GOLANG spec how WriteHeader works

Ta zasada jest taka sama dla organizmu, gdy ciało jest napisane (pisanie na odpowiedź jest dosłownie wysłaniem do klienta), to nie może być złe lub zmienione.