diff --git a/pkg/api/route_register.go b/pkg/api/route_register.go index b23c92ed1c0..daa6f35e52c 100644 --- a/pkg/api/route_register.go +++ b/pkg/api/route_register.go @@ -8,6 +8,7 @@ import ( type Router interface { Handle(method, pattern string, handlers []macaron.Handler) *macaron.Route + Get(pattern string, handlers ...macaron.Handler) *macaron.Route } type RouteRegister interface { @@ -62,7 +63,14 @@ func (rr *routeRegister) Group(pattern string, fn func(rr RouteRegister), handle func (rr *routeRegister) Register(router Router) *macaron.Router { for _, r := range rr.routes { - router.Handle(r.method, r.pattern, r.handlers) + // GET requests have to be added to macaron routing using Get() + // Otherwise HEAD requests will not be allowed. + // https://github.com/go-macaron/macaron/blob/a325110f8b392bce3e5cdeb8c44bf98078ada3be/router.go#L198 + if r.method == http.MethodGet { + router.Get(r.pattern, r.handlers...) + } else { + router.Handle(r.method, r.pattern, r.handlers) + } } for _, g := range rr.groups { diff --git a/pkg/api/route_register_test.go b/pkg/api/route_register_test.go index c430c84abc1..f8a043c48df 100644 --- a/pkg/api/route_register_test.go +++ b/pkg/api/route_register_test.go @@ -1,6 +1,7 @@ package api import ( + "net/http" "strconv" "testing" @@ -21,6 +22,16 @@ func (fr *fakeRouter) Handle(method, pattern string, handlers []macaron.Handler) return &macaron.Route{} } +func (fr *fakeRouter) Get(pattern string, handlers ...macaron.Handler) *macaron.Route { + fr.route = append(fr.route, route{ + pattern: pattern, + method: http.MethodGet, + handlers: handlers, + }) + + return &macaron.Route{} +} + func emptyHandlers(n int) []macaron.Handler { res := []macaron.Handler{} for i := 1; n >= i; i++ {