docs: function Request(method, url) {
    var self = this;
    this._query = this._query || [];
    this.method = method;
    this.url = url;
    this.header = {}; // preserves header name case
    this._header = {}; // coerces header names to lowercase
    this.on('end', function(){
      var err = null;
      var res = null;
  
      try {
        res = new Response(self);
      } catch(e) {
        err = new Error('Parser is unable to parse the response');
        err.parse = true;
        err.original = e;
        // issue #675: return the raw response if the response parsing fails
        err.rawResponse = self.xhr && self.xhr.responseText ? self.xhr.responseText : null;
        // issue #876: return the http status code if the response parsing fails
        err.statusCode = self.xhr && self.xhr.status ? self.xhr.status : null;
        return self.callback(err);
      }
  
      self.emit('response', res);
  
      var new_err;
      try {
        if (res.status < 200 || res.status >= 300) {
          new_err = new Error(res.statusText || 'Unsuccessful HTTP response');
          new_err.original = err;
          new_err.response = res;
          new_err.status = res.status;
        }
      } catch(e) {
        new_err = e; // #985 touching res may cause INVALID_STATE_ERR on old Android
      }
  
      // #1000 don't catch errors from the callback to avoid double calling it
      if (new_err) {
        self.callback(new_err, res);
      } else {
        self.callback(null, res);
      }
    });
  }