http.asciidoc 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144
  1. [[modules-http]]
  2. === HTTP
  3. The HTTP layer exposes {es}'s REST APIs over HTTP.
  4. The HTTP mechanism is completely asynchronous in nature, meaning that
  5. there is no blocking thread waiting for a response. The benefit of using
  6. asynchronous communication for HTTP is solving the
  7. http://en.wikipedia.org/wiki/C10k_problem[C10k problem].
  8. When possible, consider using
  9. http://en.wikipedia.org/wiki/Keepalive#HTTP_Keepalive[HTTP keep alive]
  10. when connecting for better performance and try to get your favorite
  11. client not to do
  12. http://en.wikipedia.org/wiki/Chunked_transfer_encoding[HTTP chunking].
  13. [http-settings]
  14. ==== HTTP settings
  15. The settings in the table below can be configured for HTTP. Note that none of
  16. them are dynamically updatable so for them to take effect they should be set in
  17. the Elasticsearch <<settings, configuration file>>.
  18. [cols="<,<",options="header",]
  19. |=======================================================================
  20. |Setting |Description
  21. |`http.port` |A bind port range. Defaults to `9200-9300`.
  22. |`http.publish_port` |The port that HTTP clients should use when
  23. communicating with this node. Useful when a cluster node is behind a
  24. proxy or firewall and the `http.port` is not directly addressable
  25. from the outside. Defaults to the actual port assigned via `http.port`.
  26. |`http.bind_host` |The host address to bind the HTTP service to. Defaults to `http.host` (if set) or `network.bind_host`.
  27. |`http.publish_host` |The host address to publish for HTTP clients to connect to. Defaults to `http.host` (if set) or `network.publish_host`.
  28. |`http.host` |Used to set the `http.bind_host` and the `http.publish_host`.
  29. |`http.max_content_length` |The max content of an HTTP request. Defaults to
  30. `100mb`.
  31. |`http.max_initial_line_length` |The max length of an HTTP URL. Defaults
  32. to `4kb`
  33. |`http.max_header_size` | The max size of allowed headers. Defaults to `8kB`
  34. |`http.compression` |Support for compression when possible (with
  35. Accept-Encoding). If HTTPS is enabled, defaults to `false`. Otherwise, defaults
  36. to `true`.
  37. Disabling compression for HTTPS mitigates potential security risks, such as a
  38. https://en.wikipedia.org/wiki/BREACH[BREACH attack]. To compress HTTPS traffic,
  39. you must explicitly set `http.compression` to `true`.
  40. |`http.compression_level` |Defines the compression level to use for HTTP responses. Valid values are in the range of 1 (minimum compression)
  41. and 9 (maximum compression). Defaults to `3`.
  42. |`http.cors.enabled` |Enable or disable cross-origin resource sharing,
  43. i.e. whether a browser on another origin can execute requests against
  44. Elasticsearch. Set to `true` to enable Elasticsearch to process pre-flight
  45. https://en.wikipedia.org/wiki/Cross-origin_resource_sharing[CORS] requests.
  46. Elasticsearch will respond to those requests with the `Access-Control-Allow-Origin` header
  47. if the `Origin` sent in the request is permitted by the `http.cors.allow-origin`
  48. list. Set to `false` (the default) to make Elasticsearch ignore the `Origin`
  49. request header, effectively disabling CORS requests because Elasticsearch will
  50. never respond with the `Access-Control-Allow-Origin` response header. Note that
  51. if the client does not send a pre-flight request with an `Origin` header or it
  52. does not check the response headers from the server to validate the
  53. `Access-Control-Allow-Origin` response header, then cross-origin security is
  54. compromised. If CORS is not enabled on Elasticsearch, the only way for the client
  55. to know is to send a pre-flight request and realize the required response headers
  56. are missing.
  57. |`http.cors.allow-origin` |Which origins to allow. Defaults to no origins
  58. allowed. If you prepend and append a `/` to the value, this will
  59. be treated as a regular expression, allowing you to support HTTP and HTTPs.
  60. for example using `/https?:\/\/localhost(:[0-9]+)?/` would return the
  61. request header appropriately in both cases. `*` is a valid value but is
  62. considered a *security risk* as your Elasticsearch instance is open to cross origin
  63. requests from *anywhere*.
  64. |`http.cors.max-age` |Browsers send a "preflight" OPTIONS-request to
  65. determine CORS settings. `max-age` defines how long the result should
  66. be cached for. Defaults to `1728000` (20 days)
  67. |`http.cors.allow-methods` |Which methods to allow. Defaults to
  68. `OPTIONS, HEAD, GET, POST, PUT, DELETE`.
  69. |`http.cors.allow-headers` |Which headers to allow. Defaults to
  70. `X-Requested-With, Content-Type, Content-Length`.
  71. |`http.cors.allow-credentials` | Whether the `Access-Control-Allow-Credentials`
  72. header should be returned. Note: This header is only returned, when the setting is
  73. set to `true`. Defaults to `false`
  74. |`http.detailed_errors.enabled` |Enables or disables the output of detailed error messages
  75. and stack traces in response output. Note: When set to `false` and the `error_trace` request
  76. parameter is specified, an error will be returned; when `error_trace` is not specified, a
  77. simple message will be returned. Defaults to `true`
  78. |`http.pipelining.max_events` |The maximum number of events to be queued up in memory before an HTTP connection is closed, defaults to `10000`.
  79. |`http.max_warning_header_count` |The maximum number of warning headers in
  80. client HTTP responses, defaults to unbounded.
  81. |`http.max_warning_header_size` |The maximum total size of warning headers in
  82. client HTTP responses, defaults to unbounded.
  83. |=======================================================================
  84. It also uses the common
  85. <<modules-network,network settings>>.
  86. [http-rest-request-tracer]
  87. ==== REST request tracer
  88. The HTTP layer has a dedicated tracer logger which, when activated, logs incoming requests. The log can be dynamically activated
  89. by setting the level of the `org.elasticsearch.http.HttpTracer` logger to `TRACE`:
  90. [source,console]
  91. --------------------------------------------------
  92. PUT _cluster/settings
  93. {
  94. "transient" : {
  95. "logger.org.elasticsearch.http.HttpTracer" : "TRACE"
  96. }
  97. }
  98. --------------------------------------------------
  99. You can also control which uris will be traced, using a set of include and exclude wildcard patterns. By default every request will be
  100. traced.
  101. [source,console]
  102. --------------------------------------------------
  103. PUT _cluster/settings
  104. {
  105. "transient" : {
  106. "http.tracer.include" : "*",
  107. "http.tracer.exclude" : ""
  108. }
  109. }
  110. --------------------------------------------------