+++ title = "Response" description = "Sending HTTP response in Echo" [menu.main] name = "Response" parent = "guide" weight = 6 +++ ## Send String `Context#String(code int, s string)` can be used to send plain text response with status code. *Example* ```go func(c echo.Context) error { return c.String(http.StatusOK, "Hello, World!") } ``` ## Send HTML (Reference to templates) `Context#HTML(code int, html string)` can be used to send simple HTML response with status code. If you are looking to send dynamically generate HTML see [templates](/guide/templates). *Example* ```go func(c echo.Context) error { return c.HTML(http.StatusOK, "Hello, World!") } ``` ### Send HTML Blob `Context#HTMLBlob(code int, b []byte)` can be used to send HTML blob with status code. You may find it handy using with a template engine which outputs `[]byte`. ## Render Template [Learn more](/guide/templates) ## Send JSON `Context#JSON(code int, i interface{})` can be used to encode a provided Go type into JSON and send it as response with status code. *Example* ```go // User type User struct { Name string `json:"name" xml:"name"` Email string `json:"email" xml:"email"` } // Handler func(c echo.Context) error { u := &User{ Name: "Jon", Email: "jon@labstack.com", } return c.JSON(http.StatusOK, u) } ``` ### Stream JSON `Context#JSON()` internally uses `json.Marshal` which may not be efficient to large JSON, in that case you can directly stream JSON. *Example* ```go func(c echo.Context) error { u := &User{ Name: "Jon", Email: "jon@labstack.com", } c.Response().Header().Set(echo.HeaderContentType, echo.MIMEApplicationJSONCharsetUTF8) c.Response().WriteHeader(http.StatusOK) return json.NewEncoder(c.Response()).Encode(u) } ``` ### JSON Pretty `Context#JSONPretty(code int, i interface{}, indent string)` can be used to a send a JSON response which is pretty printed based on indent, which could spaces or tabs. Example below sends a pretty print JSON indented with spaces: ```go func(c echo.Context) error { u := &User{ Name: "Jon", Email: "joe@labstack.com", } return c.JSONPretty(http.StatusOK, u, " ") } ``` ```js { "email": "joe@labstack.com", "name": "Jon" } ``` ### JSON Blob `Context#JSONBlob(code int, b []byte)` can be used to send pre-encoded JSON blob directly from external source, for example, database. *Example* ```go func(c echo.Context) error { encodedJSON := []byte{} // Encoded JSON from external source return c.JSONBlob(http.StatusOK, encodedJSON) } ``` ## Send JSONP `Context#JSONP(code int, callback string, i interface{})` can be used to encode a provided Go type into JSON and send it as JSONP payload constructed using a callback, with status code. [*Example*](/recipes/jsonp) ## Send XML `Context#XML(code int, i interface{})` can be used to encode a provided Go type into XML and send it as response with status cod. *Example* ```go func(c echo.Context) error { u := &User{ Name: "Jon", Email: "jon@labstack.com", } return c.XML(http.StatusOK, u) } ``` ### Stream XML `Context#XML` internally uses `xml.Marshal` which may not be efficient to large XML, in that case you can directly stream XML. *Example* ```go func(c echo.Context) error { u := &User{ Name: "Jon", Email: "jon@labstack.com", } c.Response().Header().Set(echo.HeaderContentType, echo.MIMEApplicationXMLCharsetUTF8) c.Response().WriteHeader(http.StatusOK) return xml.NewEncoder(c.Response()).Encode(u) } ``` ### XML Pretty `Context#XMLPretty(code int, i interface{}, indent string)` can be used to a send an XML response which is pretty printed based on indent, which could spaces or tabs. Example below sends a pretty print XML indented with spaces: ```go func(c echo.Context) error { u := &User{ Name: "Jon", Email: "joe@labstack.com", } return c.XMLPretty(http.StatusOK, u, " ") } ``` ```xml Jon joe@labstack.com ``` ### XML Blob `Context#XMLBlob(code int, b []byte)` can be used to send pre-encoded XML blob directly from external source, for example, database. *Example* ```go func(c echo.Context) error { encodedXML := []byte{} // Encoded XML from external source return c.XMLBlob(http.StatusOK, encodedXML) } ``` ## Send File `Context#File(file string)` can be used to send the content of file as response. It automatically sets the correct content type and handles caching gracefully. *Example* ```go func(c echo.Context) error { return c.File("") } ``` ## Send Attachment `Context#Attachment(file, name string)` is similar to `File()` except that it is used to send file as attachment with provided name. *Example* ```go func(c echo.Context) error { return c.Attachment("") } ``` ## Send Inline `Context#Inline(file, name string)` is similar to `File()` except that it is used to send file as inline with provided name. *Example* ```go func(c echo.Context) error { return c.Inline("") } ``` ## Send Blob `Context#Blob(code int, contentType string, b []byte)` can be used to send an arbitrary data response with provided content type and status code. *Example* ```go func(c echo.Context) (err error) { data := []byte(`0306703,0035866,NO_ACTION,06/19/2006 0086003,"0005866",UPDATED,06/19/2006`) return c.Blob(http.StatusOK, "text/csv", data) } ``` // Stream sends a streaming response with status code and content type. Stream(code int, contentType string, r io.Reader) error ## Send Stream `Context#Stream(code int, contentType string, r io.Reader)` can be used to send an arbitrary data stream response with provided content type, `io.Reader` and status code. *Example* ```go func(c echo.Context) error { f, err := os.Open("") if err != nil { return err } return c.Stream(http.StatusOK, "image/png", f) } ``` ## Send No Content `Context#NoContent(code int)` can be used to send empty body with status code. *Example* ```go func(c echo.Context) error { return c.NoContent(http.StatusOK) } ``` ## Redirect Request `Context#Redirect(code int, url string)` can be used to redirect the request to a provided URL with status code. *Example* ```go func(c echo.Context) error { return c.Redirect(http.StatusMovedPermanently, "") } ```