diff --git a/lib/http.js b/lib/http.js
index <HASH>..<HASH> 100644
--- a/lib/http.js
+++ b/lib/http.js
@@ -209,9 +209,11 @@ function IncomingMessage(stream) {
   // * `this.headers` will store the regular headers (and none of the special colon headers)
   this.headers = {};
   this.trailers = undefined;
+  this._lastHeadersSeen = undefined;
 
   // * Other metadata is filled in when the headers arrive.
   stream.once('headers', this._onHeaders.bind(this));
+  stream.once('end', this._onEnd.bind(this));
 }
 IncomingMessage.prototype = Object.create(PassThrough.prototype, { constructor: { value: IncomingMessage } });
 
@@ -240,12 +242,15 @@ IncomingMessage.prototype._onHeaders = function _onHeaders(headers) {
     }
   }
 
-  // * The next header block, if any, will represent the trailers
-  this.stream.once('headers', this._onTrailers.bind(this));
+  // * The last header block, if it's not the first, will represent the trailers
+  var self = this;
+  this.stream.on('headers', function(headers) {
+    self._lastHeadersSeen = headers;
+  });
 };
 
-IncomingMessage.prototype._onTrailers = function _onTrailers(trailers) {
-  this.trailers = trailers;
+IncomingMessage.prototype._onEnd = function _onEnd() {
+  this.trailers = this._lastHeadersSeen;
 };
 
 IncomingMessage.prototype.setTimeout = noop;
Using the last HEADERS frame for trailers instead of the second one. Fixes #<I>.