code: func (ctx *httpRequestContext) Value(key interface{}) interface{} {
  	if keyStr, ok := key.(string); ok {
  		if keyStr == "http.request" {
  			return ctx.r
  		}
  
  		if !strings.HasPrefix(keyStr, "http.request.") {
  			goto fallback
  		}
  
  		parts := strings.Split(keyStr, ".")
  
  		if len(parts) != 3 {
  			goto fallback
  		}
  
  		switch parts[2] {
  		case "uri":
  			return ctx.r.RequestURI
  		case "remoteaddr":
  			return RemoteAddr(ctx.r)
  		case "method":
  			return ctx.r.Method
  		case "host":
  			return ctx.r.Host
  		case "referer":
  			referer := ctx.r.Referer()
  			if referer != "" {
  				return referer
  			}
  		case "useragent":
  			return ctx.r.UserAgent()
  		case "id":
  			return ctx.id
  		case "startedat":
  			return ctx.startedAt
  		case "contenttype":
  			ct := ctx.r.Header.Get("Content-Type")
  			if ct != "" {
  				return ct
  			}
  		}
  	}
  
  fallback:
  	return ctx.Context.Value(key)
  }
docs: // Value returns a keyed element of the request for use in the context. To get
  // the request itself, query "request". For other components, access them as
  // "request.<component>". For example, r.RequestURI