HTTP

HTTP

http模块允许通过http的方式暴露Elasticsearch的api,http机制本质上是完全异步的,这意味着没有阻塞线程等待响应。使用异步通信进行HTTP的好处是解决了C10k问题。 如果可以,可考虑使用HTTP keep alive来连接以便提升性能。并且不要在客户端使用HTTP chunking

Setting(配置)

可以为http请求做下表中的配置,但是所有的配置都不是动态加载的,必须重启elasticsearch后才能生效。配置文件为:elasticsearch.yml

配置 说明
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_host和http.publish_host默认设置为http.host或network.host。
http.max_content_length HTTP请求的最大内容。 默认值为100mb。 如果设置为大于Integer.MAX_VALUE,则将重置为100mb。
http.max_initial_line_length http url最大值,默认4kb
http.max_header_size http header(请求头)的最大值,默认8kb
http.compression 设置是否压缩tcp传输时的数据,默认为true。
http.compression_level 定义HTTP传输的压缩级别。 有效值在1(最小压缩)和9(最大压缩)的范围内。 默认为3。
http.cors.enabled 配置是否允许跨域请求,即另一来源上的浏览器是否可以针对Elasticsearch执行请求。 设置为true以启用Elasticsearch以处理“预检”CORS请求。 如果请求中发送的Origin由http.cors.allow-origin列表允许,Elasticsearch将使用Access-Control-Allow-Origin标头响应这些请求。 设置为false(默认值)使Elasticsearch忽略Origin请求头,有效地禁用CORS请求,因为Elasticsearch永远不会使用Access-Control-Allow-Origin响应头响应。 请注意,如果客户端没有发送带有Origin标头的“预检”请求,或者它不检查来自服务器的响应报头来验证Access-Control-Allow-Origin响应报头,则跨原点安全性受到损害。 如果Elasticsearch上没有启用CORS,客户端知道的唯一方法是发送一个“预检”请求,并实现所需的响应头丢失。
http.cors.allow-origin 定义允许哪些源请求。可以使用正则表达式,例如/https?:\/\/localhost(:[0-9]+)?/可设置支持本地HTTP和HTTPS请求。也可以设置为*,但是会存在安全隐患,因为任何来源都可访问
http.cors.max-age 浏览器会发送一个“预检”的OPTIONS请求,来检查CORS设置。max-age定义应该缓存多长时间的结果。默认为1728000(20天)
http.cors.allow-methods 定义了允许的请求方式,默认允许OPTIONS, HEAD, GET, POST, PUT, DELETE
http.cors.allow-headers 定义了允许的请求头信息。默认允许X-Requested-With, Content-Type, Content-Length
http.cors.allow-credentials 是否返回设置的Access-Control-Allow-Credentials头信息。默认为false
http.detailed_errors.enabled 是否输出详细的错误信息和堆栈。默认为true
http.pipelining 是否启用HTTP管道支持, 默认为true
http.pipelining.max_events 在一个HTTP连接被关闭之前内存队列中允许的最大的事件数量,默认为10000 该模块也可使用一些公共的网络配置(见网络设置一节)
http.content_type.required 启用或禁用对具有内容的所有请求的Content-Type标头的严格检查和使用,默认为false。

Disable HTTP(禁用HTTP)

HTTP模块可以通过将http.enable设置为false来禁用。Elasticsearch节点(和Java客户端)的内部通信使用transport接口,而非HTTP。这意味着我们可以将不接受直接REST请求的节点的HTTP禁用。比如,可以将数据节点的http禁用,创建非数据节点用来处理所有的REST请求。需要注意的是,不能向一个已经禁用了HTTP的节点直接发送任何REST请求。