The http module allows to expose elasticsearch APIs over HTTP.

The http mechanism is completely asynchronous in nature, meaning that there is no blocking thread waiting for a response. The benefit of using asynchronous communication for HTTP is solving the C10k problem.

When possible, consider using HTTP keep alive when connecting for better performance and try to get your favorite client not to do HTTP chunking.


The settings in the table below can be configured for HTTP. Note that none of them are dynamically updatable so for them to take effect they should be set in elasticsearch.yml.

Setting Description


A bind port range. Defaults to 9200-9300.


The port that HTTP clients should use when communicating with this node. Useful when a cluster node is behind a proxy or firewall and the http.port is not directly addressable from the outside. Defaults to the actual port assigned via http.port.


The host address to bind the HTTP service to. Defaults to (if set) or network.bind_host.


The host address to publish for HTTP clients to connect to. Defaults to (if set) or network.publish_host.

Used to set the http.bind_host and the http.publish_host Defaults to or


The max content of an HTTP request. Defaults to 100mb. If set to greater than Integer.MAX_VALUE, it will be reset to 100mb.


The max length of an HTTP URL. Defaults to 4kb


The max size of allowed headers. Defaults to 8kB


Support for compression when possible (with Accept-Encoding). Defaults to false.


Defines the compression level to use. Defaults to 6.


Enable or disable cross-origin resource sharing, i.e. whether a browser on another origin can do requests to Elasticsearch. Defaults to false.


Which origins to allow. Defaults to no origins allowed. If you prepend and append a / to the value, this will be treated as a regular expression, allowing you to support HTTP and HTTPs. for example using /https?:\/\/localhost(:[0-9]+)?/ would return the request header appropriately in both cases. * is a valid value but is considered a security risk as your elasticsearch instance is open to cross origin requests from anywhere.


Browsers send a "preflight" OPTIONS-request to determine CORS settings. max-age defines how long the result should be cached for. Defaults to 1728000 (20 days)


Which methods to allow. Defaults to OPTIONS, HEAD, GET, POST, PUT, DELETE.


Which headers to allow. Defaults to X-Requested-With, Content-Type, Content-Length.


Whether the Access-Control-Allow-Credentials header should be returned. Note: This header is only returned, when the setting is set to true. Defaults to false


Enables or disables the output of detailed error messages and stack traces in response output. Note: When set to false and the error_trace request parameter is specified, an error will be returned; when error_trace is not specified, a simple message will be returned. Defaults to true


Enable or disable HTTP pipelining, defaults to true.


The maximum number of events to be queued up in memory before a HTTP connection is closed, defaults to 10000.

It also uses the common network settings.

Disable HTTPedit

The http module can be completely disabled and not started by setting http.enabled to false. Elasticsearch nodes (and Java clients) communicate internally using the transport interface, not HTTP. It might make sense to disable the http layer entirely on nodes which are not meant to serve REST requests directly. For instance, you could disable HTTP on data-only nodes if you also have client nodes which are intended to serve all REST requests. Be aware, however, that you will not be able to send any REST requests (eg to retrieve node stats) directly to nodes which have HTTP disabled.