Skip to content

[BUG]compress=1 causes ClickHouse error responses through chproxy to become 200 OK + Content-Length: 0, so JDBC cannot read the error message #593

Description

@jierfei1007

Describe the bug
ClickHouse version: 26.3.10.62

When a client sends a request to ClickHouse through chproxy using JDBC, and the request contains compress=1, SQL execution errors are not returned correctly to the JDBC client.
For example, ClickHouse returns an exception header:

X-ClickHouse-Exception-Code: 49
When connecting directly to ClickHouse Server, the detailed error message is returned correctly in the HTTP body. With compress=1, the body uses ClickHouse's internal compressed format and does not include a standard Content-Encoding header.
However, when the same request goes through chproxy, the response becomes:
HTTP/1.1 200 OK
Content-Type: text/plain; charset=UTF-8
X-ClickHouse-Exception-Code: 49
X-ClickHouse-Exception-Tag: ...
X-ClickHouse-Query-Id: ...
X-ClickHouse-Summary: ...
Content-Length: 0
As a result, the JDBC client can see the exception header but cannot read the detailed error message.
Direct ClickHouse Response
When connecting directly to ClickHouse Server with compress=1, a failed SQL query returns a valid error response:
HTTP/1.1 500 Internal Server Error
Content-Type: text/plain; charset=UTF-8
Transfer-Encoding: chunked
X-ClickHouse-Exception-Code: 49
X-ClickHouse-Exception-Tag: ...
X-ClickHouse-Query-Id: test-jdbc-like
X-ClickHouse-Summary: {...}
The HTTP body contains the detailed error message in ClickHouse's internal compressed format.
Response Through chproxy
The same request through chproxy returns:
HTTP/1.1 200 OK
Content-Type: text/plain; charset=UTF-8
X-ClickHouse-Exception-Code: 49
X-ClickHouse-Exception-Tag: ...
X-ClickHouse-Query-Id: ...
X-ClickHouse-Summary: {...}
Content-Length: 0
The ClickHouse exception headers are preserved, but:
HTTP status changes from 500 to 200
response body is lost
Content-Length becomes 0

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions