When uploading reasonably sized files (<100MB) the XHR will return the response code and abort if the server responds with an error code before the upload transfer is complete. When the transfer is very large though, the upload transfer proceeds and the XHR does not abort. If the server sends the "Connection: close" header in the response, the XHR always aborts, but never shows the response code or status sent by the server.
Do you have a test case, or more specific steps to reproduce? So far, this doesn't necessarily sound like a bug - it can be just that server and client notion of "transfer being complete" are naturally out of sync.
I think you are right. Checking through the XHR specs seems to indicate that this behaviour in Webkit is based on the spec. I guess I'll to use WebSockets if I want to get the desired effect.