diff --git a/registry/handlers/manifests.go b/registry/handlers/manifests.go index 8da3f7af..6f2f5178 100644 --- a/registry/handlers/manifests.go +++ b/registry/handlers/manifests.go @@ -3,6 +3,7 @@ package handlers import ( "bytes" "fmt" + "mime" "net/http" "strings" @@ -97,14 +98,10 @@ func (imh *manifestHandler) GetManifest(w http.ResponseWriter, r *http.Request) // we need to split each header value on "," to get the full list of "Accept" values (per RFC 2616) // https://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.1 for _, mediaType := range strings.Split(acceptHeader, ",") { - // remove "; q=..." if present - if i := strings.Index(mediaType, ";"); i >= 0 { - mediaType = mediaType[:i] + if mediaType, _, err = mime.ParseMediaType(mediaType); err != nil { + continue } - // it's common (but not required) for Accept values to be space separated ("a/b, c/d, e/f") - mediaType = strings.TrimSpace(mediaType) - if mediaType == schema2.MediaTypeManifest { supports[manifestSchema2] = true }