handler.go
func (hs *HandlersStack) ServeHTTP(w http.ResponseWriter, r *http.Request) {
	// Get a context for the request from ctxPool.
	c := getContext(w, r)

	// Set some "good practice" default headers.
	c.ResponseWriter.Header().Set("Cache-Control", "no-cache")
	c.ResponseWriter.Header().Set("Content-Type", "application/json")
	c.ResponseWriter.Header().Set("Connection", "keep-alive")
	c.ResponseWriter.Header().Set("Vary", "Accept-Encoding")
	//c.ResponseWriter.Header().Set("Access-Control-Allow-Origin", "*")
	c.ResponseWriter.Header().Set("Access-Control-Allow-Headers", "X-Requested-With")
	c.ResponseWriter.Header().Set("Access-Control-Allow-Methods", "PUT,POST,GET,DELETE,OPTIONS")

	// Always recover form panics.
	defer c.Recover()

	// Enter the handlers stack.
	c.Next()

	// Respnose data
	// if c.written == false {
	// 	c.Fail(errors.New("not written"))
	// }
	// Put the context to ctxPool
	putContext(c)
}
func (hs *HandlersStack) ServeHTTP(w http.ResponseWriter, r *http.Request) {
	// Get a context for the request from ctxPool.
	c := getContext(w, r)

	// Set some "good practice" default headers.
	c.ResponseWriter.Header().Set("Cache-Control", "no-cache")
	c.ResponseWriter.Header().Set("Content-Type", "application/json")
	c.ResponseWriter.Header().Set("Connection", "keep-alive")
	c.ResponseWriter.Header().Set("Vary", "Accept-Encoding")
	//c.ResponseWriter.Header().Set("Access-Control-Allow-Origin", "*")
	c.ResponseWriter.Header().Set("Access-Control-Allow-Headers", "X-Requested-With")
	c.ResponseWriter.Header().Set("Access-Control-Allow-Methods", "PUT,POST,GET,DELETE,OPTIONS")

	// Always recover form panics.
	defer c.Recover()

	// Enter the handlers stack.
	c.Next()

	// Respnose data
	// if c.written == false {
	// 	c.Fail(errors.New("not written"))
	// }
	// Put the context to ctxPool
	putContext(c)
}
// ServeHTTP makes a context for the request, sets some good practice default headers and enters the handlers stack.