Question: Here need call res.wirteHead when status is 204 or 304?
I have some little doubt, as you can see below:
### From koa

https://github.com/koajs/koa/blob/v2.x/lib/response.js#L135-L142

Here will be returned `204` or `304`.

``` js
    // no content
    if (null == val) {
      if (!statuses.empty[this.status]) this.status = 204;
      this.remove('Content-Type');
      this.remove('Content-Length');
      this.remove('Transfer-Encoding');
      return;
    }
```
### From node
#### `_http_server.js` `writeHead()` method

https://github.com/nodejs/node/blob/master/lib/_http_server.js#L197-L210

``` js
  if (statusCode === 204 || statusCode === 304 ||
      (100 <= statusCode && statusCode <= 199)) {
    // RFC 2616, 10.2.5:
    // The 204 response MUST NOT include a message-body, and thus is always
    // terminated by the first empty line after the header fields.
    // RFC 2616, 10.3.5:
    // The 304 response MUST NOT contain a message-body, and thus is always
    // terminated by the first empty line after the header fields.
    // RFC 2616, 10.1 Informational 1xx:
    // This class of status code indicates a provisional response,
    // consisting only of the Status-Line and optional headers, and is
    // terminated by an empty line.
    this._hasBody = false;
  }
```
#### `_http_outgoing.js` `end()` method

https://github.com/nodejs/node/blob/master/lib/_http_outgoing.js#L66-L78

``` js
  this.upgrading = false;
  this.chunkedEncoding = false;
  this.shouldKeepAlive = true;
  this.useChunkedEncodingByDefault = true;
  this.sendDate = false;
  this._removedHeader = {};

  this._contentLength = null;
  this._hasBody = true;
  this._trailer = '';

  this.finished = false;
  this._headerSent = false;
```

https://github.com/nodejs/node/blob/master/lib/_http_outgoing.js#L596-L601

``` js
  if (this._hasBody && this.chunkedEncoding) {
    ret = this._send('0\r\n' + this._trailer + '\r\n', 'latin1', finish);
  } else {
    // Force a flush, HACK.
    ret = this._send('', 'latin1', finish);
  }
```
### So, Here need call `res.writeHead(status)` after `remove` three fields?

``` js
    // no content
    if (null == val) {
      if (!statuses.empty[this.status]) this.status = 204;
      this.remove('Content-Type');
      this.remove('Content-Length');
      this.remove('Transfer-Encoding');
      this.res.writeHead(this.status);
      return;
    }
```
