原英文版地址: https://www.elastic.co/guide/en/elasticsearch/reference/7.7/modules-http.html, 原文档版权归 www.elastic.co 所有
本地英文版地址: ../en/modules-http.html

HTTP

HTTP层通过HTTP公开 Elasticsearch 的 REST API。

HTTP机制本质上是完全异步的,这意味着不存在等待响应的阻塞线程。 对 HTTP 使用异步通信的好处是解决了 C10k problem 问题( 国内打不开点这里)。

如果可以,考虑在连接时使用 HTTP keep alive 以获得更好的性能,并尝试让你最喜欢的客户端不要进行 HTTP 分块

HTTP 设置

下表中的设置可以对 HTTP 进行配置。 注意,它们都不能动态更新,要让它们生效,应该在 Elasticsearch 的 配置文件 中设置。

Setting Description

http.port

绑定端口范围。默认为 9200-9300

http.publish_port

HTTP客户端在与此节点通信时应使用的端口。 当集群的节点位于代理或防火墙之后,并且 http.port 不能从外部直接寻址时,此功能非常有用。默认为通过http.port分配的实际端口。

http.bind_host

HTTP 服务要绑定到的主机地址。默认为 http.host (如果设置了) 或者 network.bind_host

http.publish_host

要发布供 HTTP 客户端连接的主机地址。默认为 http.host (如果设置了) 或者 network.publish_host

http.host

用于设置 http.bind_hosthttp.publish_host

http.max_content_length

HTTP 请求的最大内容。默认为 100mb

http.max_initial_line_length

HTTP URL 的最大长度。默认为 4kb

http.max_header_size

允许的 header 大小的最大值。默认为 8kB

http.compression

如果可以就支持压缩 (使用 Accept-Encoding)。如果开启了 HTTPS,默认为 false。否则,默认为 true

对 HTTPS 禁用压缩可以降低潜在的安全风险,如 BREACH 攻击。要压缩 HTTPS 流量,必须将 http.compression 设置为 true

http.compression_level

定义用于 HTTP 响应的压缩级别。有效值的范围为 1(最小压缩) 到 9 (最大压缩)。默认为 3

http.cors.enabled

启用或禁用 跨域(cross-origin) 资源共享,即在浏览器上另一个源是否可以对 Elasticsearch 执行请求。 设置为 true 以使 Elasticsearch 能够处理 预检的(pre-flight) CORS 请求。 如果 http.cors.allow-origin 列表允许请求中发送的 Origin(域),Elasticsearch 将使用 Access-Control-Allow-Origin 头响应这些请求。 设置为 false (默认),Elasticsearch 会忽略 Origin 请求头,能有效的禁用 CORS 请求,因为 Elasticsearch 永远不会使用 Access-Control-Allow-Origin 响应头进行响应。 注意,如果客户端没有发送带有 Origin 头的 预检的(pre-flight) 请求,或者没有检查来自服务器的响应头以验证Access-Control-Allow-Origin 响应头,则 跨域(cross-origin) 安全性会受到损害。 如果 Elasticsearch 上没有启用 CORS,那么客户端知道的唯一方法是发送一个 预检的(pre-flight) 请求,并意识到所需的响应头丢失了。

http.cors.allow-origin

允许的域(源, origin)。默认不允许任何域。 如果在该值前添加 /,它将被视为正则表达式,允许支持 HTTP 和 HTTPS。 例如使用/https?:\/\/localhost(:[0-9]+)?/ 在这两种情况下(即http和https)都会适当地返回请求头。 * 是一个有效的值,但被认为是一个安全风险,因为 Elasticsearch 实例对来自任何地方的跨域请求都开放。

http.cors.max-age

浏览器发送带 “预检(preflight)” 选项的请求来确定 CORS 设置。 max-age 定义了结果要缓存的时间。默认为 1728000 (20 天)。

http.cors.allow-methods

允许哪些方法。默认为 OPTIONS, HEAD, GET, POST, PUT, DELETE

http.cors.allow-headers

允许那些 header 。默认为 X-Requested-With, Content-Type, Content-Length

http.cors.allow-credentials

是否要返回 Access-Control-Allow-Credentials 头。注意:仅当设置为 true 时才会返回这个值。默认为 false

http.detailed_errors.enabled

启用或禁用响应中详细错误消息和堆栈跟踪的输出。 注意:当设置为 false 且指定了 error_trace 请求参数时,会返回错误;如果未指定 error_trace,则只返回一个简单的信息。默认为 true

http.pipelining.max_events

关闭 HTTP 连接之前,要在内存中排队的最大事件数,默认为 10000

http.max_warning_header_count

客户端 HTTP 响应中警告头的最大数量,默认为 不限制。

http.max_warning_header_size

客户端 HTTP 响应中警告头的最大总大小,默认为 不限制。

它还使用通用的 网络设置

REST 请求跟踪器

HTTP层有一个专用的跟踪记录器,当它被激活时,记录传入的请求。 通过将 org.elasticsearch.http.HttpTracer日志的级别设置为 TRACE ,可以动态激活日志:

PUT _cluster/settings
{
   "transient" : {
      "logger.org.elasticsearch.http.HttpTracer" : "TRACE"
   }
}

您还可以使用一组包含和排除通配符模式来控制将跟踪哪些 uri。默认情况下,每个请求都会被跟踪。

PUT _cluster/settings
{
   "transient" : {
      "http.tracer.include" : "*",
      "http.tracer.exclude" : ""
   }
}