Having read the specification, I think you are right. Section 4.3 says quite clearly that all other responses (except 1xx, 204, and 304) must have a message body, although its length may be zero. So, how about this code:

```python
        if self.must_close or self.req.should_close():
            return True
        if self.response_length is not None or self.chunked:
            return False
        if status.startswith('1') or status in ('204', '304'):
            return False
        return True
```