[mirror] Scalable static site server for Git forges (like GitHub Pages)

Fix several content type negotiation issues.

* No `Accept:` header should be the same as `Accept: */*`.
* For unresolved reference error, `text/plain` should take priority.

+5 -2
+4 -1
src/http.go
··· 55 } 56 57 func ParseAcceptHeader(headerValue string) (result HTTPContentTypes) { 58 result = HTTPContentTypes{parseGenericAcceptHeader(headerValue)} 59 return 60 } ··· 65 prefs[code] = 0 66 } 67 for _, ctyp := range e.contentTypes { 68 - if ctyp.code == "*" || ctyp.code == "*/*" { 69 for code := range prefs { 70 prefs[code] = ctyp.qval 71 }
··· 55 } 56 57 func ParseAcceptHeader(headerValue string) (result HTTPContentTypes) { 58 + if headerValue == "" { 59 + headerValue = "*/*" 60 + } 61 result = HTTPContentTypes{parseGenericAcceptHeader(headerValue)} 62 return 63 } ··· 68 prefs[code] = 0 69 } 70 for _, ctyp := range e.contentTypes { 71 + if ctyp.code == "*/*" { 72 for code := range prefs { 73 prefs[code] = ctyp.qval 74 }
+1 -1
src/pages.go
··· 575 func reportUpdateResult(w http.ResponseWriter, r *http.Request, result UpdateResult) error { 576 var unresolvedRefErr UnresolvedRefError 577 if result.outcome == UpdateError && errors.As(result.err, &unresolvedRefErr) { 578 - offeredContentTypes := []string{"application/vnd.git-pages.unresolved", "text/plain"} 579 acceptedContentTypes := ParseAcceptHeader(r.Header.Get("Accept")) 580 switch acceptedContentTypes.Negotiate(offeredContentTypes...) { 581 default:
··· 575 func reportUpdateResult(w http.ResponseWriter, r *http.Request, result UpdateResult) error { 576 var unresolvedRefErr UnresolvedRefError 577 if result.outcome == UpdateError && errors.As(result.err, &unresolvedRefErr) { 578 + offeredContentTypes := []string{"text/plain", "application/vnd.git-pages.unresolved"} 579 acceptedContentTypes := ParseAcceptHeader(r.Header.Get("Accept")) 580 switch acceptedContentTypes.Negotiate(offeredContentTypes...) { 581 default: