# HTTP

原文链接 : [https://www.elastic.co/guide/en/elasticsearch/reference/5.3/modules-http.html](https://www.elastic.co/guide/en/elasticsearch/reference/5.3/modules-http.html)

译文链接 : [http://www.apache.wiki/display/Elasticsearch/HTTP](http://www.apache.wiki/display/Elasticsearch/HTTP)

贡献者 : [赵芳城](/display/~zhaofangcheng)，[ApacheCN](/display/~apachecn)，[Apache中文网](/display/~apachechina)

## HTTP

  http模块允许通过http的方式暴露Elasticsearch的api,http机制本质上是完全异步的，这意味着没有阻塞线程等待响应。使用异步通信进行HTTP的好处是解决了[C10k](http://en.wikipedia.org/wiki/C10k_problem)问题。 如果可以，可考虑使用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请求。