> ## Documentation Index
> Fetch the complete documentation index at: https://private-7c7dfe99-parallel-read-in-order-multi-part.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# http_* session settings

> ClickHouse session settings in the http_* generated group.

export const VersionHistory = ({rows = []}) => {
  if (rows.length === 0) {
    return null;
  }
  const headers = ["Version", "Default value", "Comment"];
  const border = "1px solid rgba(128, 128, 128, 0.3)";
  const cell = {
    border,
    padding: "0.25rem 0.5rem",
    textAlign: "start",
    verticalAlign: "top"
  };
  return <details className="not-prose" style={{
    border,
    borderRadius: "0.5rem",
    margin: "0.5rem 0",
    padding: "0.5rem 0.75rem",
    fontSize: "0.8125rem",
    lineHeight: "1.125rem"
  }}>
      <summary style={{
    cursor: "pointer",
    fontWeight: 600,
    opacity: 0.72
  }}>
        Version history
      </summary>
      <table style={{
    borderCollapse: "collapse",
    width: "100%",
    margin: "0.5rem 0 0"
  }}>
        <thead>
          <tr>
            {headers.map(header => <th key={header} style={{
    ...cell,
    fontWeight: 600,
    opacity: 0.72
  }}>
                {header}
              </th>)}
          </tr>
        </thead>
        <tbody>
          {rows.map((row, row_index) => <tr key={row.id ?? row_index}>
              {(row.items ?? []).map((item, item_index) => <td key={item_index} style={{
    ...cell,
    overflowWrap: "anywhere"
  }}>
                  {item?.label}
                </td>)}
            </tr>)}
        </tbody>
      </table>
    </details>;
};

export const SettingsInfoBlock = ({type, default_value, changeable_without_restart}) => {
  return <div className="not-prose" style={{
    display: "flex",
    flexWrap: "wrap",
    alignItems: "baseline",
    columnGap: "0.5rem",
    rowGap: "0.125rem",
    margin: "0.375rem 0",
    fontSize: "0.8125rem",
    lineHeight: "1.125rem"
  }}>
      <div style={{
    fontWeight: 600,
    opacity: 0.72
  }}>Type</div>
      <div style={{
    overflowWrap: "anywhere"
  }}>{type}</div>
      <div style={{
    fontWeight: 600,
    opacity: 0.72,
    marginInlineStart: "0.5rem"
  }}>Default</div>
      <div style={{
    overflowWrap: "anywhere"
  }}>{default_value}</div>
      {changeable_without_restart && <div style={{
    fontWeight: 600,
    opacity: 0.72,
    marginInlineStart: "0.5rem"
  }}>
          Changeable without restart
        </div>}
      {changeable_without_restart && <div style={{
    overflowWrap: "anywhere"
  }}>
          {changeable_without_restart}
        </div>}
    </div>;
};

These settings are available in [system.settings](/reference/system-tables/settings) and are autogenerated from [source](https://github.com/ClickHouse/ClickHouse/blob/master/src/Core/Settings.cpp).

<h2 id="http_allow_database_as_path">
  http\_allow\_database\_as\_path
</h2>

<SettingsInfoBlock type="Bool" default_value="1" />

<VersionHistory rows={[{"id": "row-1","items": [{"label": "26.8"},{"label": "0"},{"label": "New setting to recognize a database name in the URL path of HTTP requests."}]}, {"id": "row-2","items": [{"label": "26.10"},{"label": "1"},{"label": "Enabled by default: the HTTP interface interprets a `\/database\/` component of the URL path as the current database."}]}]} />

If enabled, the HTTP interface recognizes a `/database/` component in the URL path and uses it as the current database.

This is a per-user setting that controls whether a routed path-style request is interpreted. Routing itself is gated globally by the server-level `http_allow_path_requests` configuration setting (on by default), which must be enabled for the HTTP interface to route a path-style request (such as `/my_db/my_table.csv`) to the query handler at all — that routing decision is made before the request is authenticated, so it cannot depend on a per-user setting. When `http_allow_path_requests` is off, unknown paths return a plain `404`. After routing, this setting is re-checked against the authenticated user's effective settings, so it can be disabled selectively per user, role, or profile.

<h2 id="http_allow_filters_as_path">
  http\_allow\_filters\_as\_path
</h2>

<SettingsInfoBlock type="Bool" default_value="1" />

<VersionHistory rows={[{"id": "row-1","items": [{"label": "26.8"},{"label": "0"},{"label": "New setting to recognize hive-style `name=value` filters in the URL path of HTTP requests."}]}, {"id": "row-2","items": [{"label": "26.10"},{"label": "1"},{"label": "Enabled by default: the HTTP interface interprets `\/name=value\/` path components as filters combined with `AND`."}]}]} />

If enabled, the HTTP interface recognizes `/name=value/` components in the path (hive partitioning style) and translates them to filters combined with AND. Operators `>`, `<`, `>=`, `<=`, `!=`, `<>` are also recognized.

Like [`http_allow_database_as_path`](/reference/settings/session-settings/http#http_allow_database_as_path), this is a per-user setting; routing of path-style requests is gated globally by the server-level `http_allow_path_requests` configuration setting (routing happens before authentication).

<h2 id="http_allow_filters_as_unrecognized_url_parameters">
  http\_allow\_filters\_as\_unrecognized\_url\_parameters
</h2>

<SettingsInfoBlock type="Bool" default_value="0" />

<VersionHistory rows={[{"id": "row-1","items": [{"label": "26.8"},{"label": "0"},{"label": "New setting to treat unrecognized URL parameters as filter expressions in HTTP requests."}]}]} />

If enabled, any URL parameter not recognized as a known parameter, setting, or `param_*` prefix is treated as a filter and combined with AND. Two forms are accepted:

* A plain `name=value` becomes the equality `` `name` = 'value' `` (the identifier is back-quoted, the value is quoted as a string literal).
* A comparison operator (`!=`, `>`, `<`, `>=`, `<=`, `<>`) makes it a comparison: either split across the parameter (`?a!=2`, `?a>=2`) or written inline when the URL has no `=` to split on (`?a<>2`, `?f(x)>3`), in which case the reassembled `name[=value]` is parsed as a full SQL expression.

Disabled by default, unlike the other `http_allow_*` settings: it applies to every request of the HTTP interface, including the `/?query=...` endpoint, so enabling it turns any unrecognized URL parameter a client appends (a request id, a signature, a cache buster) into a filter of the query. A misspelt setting name is then no longer reported as `UNKNOWN_SETTING` but fails with `UNKNOWN_IDENTIFIER` (or, if the name happens to match a column, silently filters the result), and the parameter value becomes part of the query text, where it is not masked like the `Request URI` in the log.

<h2 id="http_allow_table_as_file">
  http\_allow\_table\_as\_file
</h2>

<SettingsInfoBlock type="Bool" default_value="1" />

<VersionHistory rows={[{"id": "row-1","items": [{"label": "26.8"},{"label": "0"},{"label": "New setting to recognize a table name in the URL path of HTTP requests, with optional format\/compression extensions."}]}, {"id": "row-2","items": [{"label": "26.10"},{"label": "1"},{"label": "Enabled by default: the HTTP interface interprets the last URL path component as `table[.format[.compression]]` and answers it with `SELECT * FROM table`."}]}]} />

If enabled, the HTTP interface recognizes the last URL path component as a table name in the form `table`, `table.format`, or `table.format.compression`. The path is interpreted as `SELECT * FROM table`.

Like [`http_allow_database_as_path`](/reference/settings/session-settings/http#http_allow_database_as_path), this is a per-user setting; routing of path-style requests is gated globally by the server-level `http_allow_path_requests` configuration setting (routing happens before authentication).

<h2 id="http_connection_timeout">
  http\_connection\_timeout
</h2>

<SettingsInfoBlock type="Seconds" default_value="1" />

HTTP connection timeout (in seconds).

Possible values:

* Any positive integer.
* 0 - Disabled (infinite timeout).

<h2 id="http_make_head_request">
  http\_make\_head\_request
</h2>

<SettingsInfoBlock type="Bool" default_value="1" />

The `http_make_head_request` setting allows the execution of a `HEAD` request while reading data from HTTP to retrieve information about the file to be read, such as its size. Since it's enabled by default, it may be desirable to disable this setting in cases where the server does not support `HEAD` requests.

<h2 id="http_native_compression_disable_checksumming_on_decompress">
  http\_native\_compression\_disable\_checksumming\_on\_decompress
</h2>

<SettingsInfoBlock type="Bool" default_value="0" />

Enables or disables checksum verification when decompressing the HTTP POST data from the client. Used only for ClickHouse native compression format (not used with `gzip` or `deflate`).

For more information, read the [HTTP interface description](/concepts/features/interfaces/http).

Possible values:

* 0 — Disabled.
* 1 — Enabled.

<h2 id="http_receive_timeout">
  http\_receive\_timeout
</h2>

<SettingsInfoBlock type="Seconds" default_value="30" />

<VersionHistory rows={[{"id": "row-1","items": [{"label": "23.6"},{"label": "30"},{"label": "See http_send_timeout."}]}]} />

HTTP receive timeout (in seconds).

Possible values:

* Any positive integer (seconds). `0` is **not** an infinite timeout and can cause connection setup failures (POSIX socket timeouts require a positive interval).

<h2 id="http_send_timeout">
  http\_send\_timeout
</h2>

<SettingsInfoBlock type="Seconds" default_value="30" />

<VersionHistory rows={[{"id": "row-1","items": [{"label": "23.6"},{"label": "30"},{"label": "3 minutes seems crazy long. Note that this is timeout for a single network write call, not for the whole upload operation."}]}]} />

HTTP send timeout (in seconds).

Possible values:

* Any positive integer (seconds). `0` is **not** an infinite timeout and can cause connection setup failures (POSIX socket timeouts require a positive interval).

<Note>
  It's applicable only to the default profile. A server reboot is required for the changes to take effect.
</Note>

<h2 id="http_skip_not_found_url_for_globs">
  http\_skip\_not\_found\_url\_for\_globs
</h2>

<SettingsInfoBlock type="Bool" default_value="1" />

Skip URLs for globs with HTTP\_NOT\_FOUND error

<h2 id="http_wait_end_of_query">
  http\_wait\_end\_of\_query
</h2>

<SettingsInfoBlock type="Bool" default_value="0" />

Enable HTTP response buffering on the server-side.

<h2 id="http_write_exception_in_output_format">
  http\_write\_exception\_in\_output\_format
</h2>

<SettingsInfoBlock type="Bool" default_value="0" />

<VersionHistory rows={[{"id": "row-1","items": [{"label": "25.11"},{"label": "0"},{"label": "Changed for consistency across formats"}]}, {"id": "row-2","items": [{"label": "23.9"},{"label": "1"},{"label": "Output valid JSON\/XML on exception in HTTP streaming."}]}]} />

Write exception in output format to produce valid output. Works with JSON and XML formats.

<h2 id="http_x_clickhouse_format_overrides_output_format">
  http\_x\_clickhouse\_format\_overrides\_output\_format
</h2>

<SettingsInfoBlock type="Bool" default_value="1" />

<VersionHistory rows={[{"id": "row-1","items": [{"label": "26.8"},{"label": "1"},{"label": "Controls whether the `X-ClickHouse-Format` HTTP header is an alias for `output_format` (overriding the query's `FORMAT` clause), as since 26.8, or for `default_format`, as before 26.8. This entry retroactively documents the 26.8 change so `compatibility` with versions before 26.8 restores the old header behavior."}]}, {"id": "row-2","items": [{"label": "26.10"},{"label": "1"},{"label": "Setting newly added in 26.10 to gate the `X-ClickHouse-Format` HTTP header change that shipped in 26.8. The meaningful semantic change is registered under the 26.8 block so `compatibility = '26.7'` reverts it while `compatibility = '26.8'` and `'26.9'` keep the behavior of those releases; this entry exists so the upgrade check accepts the newly-introduced name."}]}]} />

Controls which setting the `X-ClickHouse-Format` HTTP header maps to.

If enabled (the default), the header is an alias for the `output_format` setting: it is an explicit override of the response format that wins over the `FORMAT` clause in the query and over the file extension in the URL path.

If disabled, the header is an alias for the `default_format` setting, as it was before version 26.8: it only selects the format used when the query has no `FORMAT` clause and no other format override is applied.

In both cases the header overrides the URL parameter of the same name (`output_format` or `default_format`, respectively) and never changes how the request body of an `INSERT` is parsed.

This is a compatibility setting for the HTTP interface: the header is consumed before the query is parsed, so it must be supplied via a URL parameter or a user profile, not via an in-query `SETTINGS` clause. Like `output_format` and `default_format` themselves, it can always be changed in read-only mode (`readonly = 1`), so a read-only user can pass it as a URL parameter.

<h2 id="http_zlib_compression_level">
  http\_zlib\_compression\_level
</h2>

<SettingsInfoBlock type="Int64" default_value="3" />

Sets the level of data compression in the response to an HTTP request if [enable\_http\_compression = 1](/reference/settings/session-settings/enable#enable_http_compression).

Possible values: Numbers from 1 to 12. Levels above `9` require the default build with `libdeflate`; a build without `libdeflate` supports levels 1 to 9.
