Handle decoding errors more gracefully.

Bad inputs (chunks > 4k) were causing empty server responses. throw a 400 instead.
I don't completely understand this change. Mind explaining it?