Skip to content

Commit 70c6945

Browse files
committed
REST high-level client: move to POST when calling API to retrieve which support request body (#28342)
It has been pointed out that GET with body may cause problems to some proxies. We are then switching to POST the API that retrieve info and support a request body. Closes #28326
1 parent 63500f7 commit 70c6945

File tree

3 files changed

+29
-22
lines changed

3 files changed

+29
-22
lines changed

client/rest-high-level/src/main/java/org/elasticsearch/client/Request.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -360,7 +360,7 @@ static Request multiGet(MultiGetRequest multiGetRequest) throws IOException {
360360
parameters.withRealtime(multiGetRequest.realtime());
361361
parameters.withRefresh(multiGetRequest.refresh());
362362
HttpEntity entity = createEntity(multiGetRequest, REQUEST_BODY_CONTENT_TYPE);
363-
return new Request(HttpGet.METHOD_NAME, "/_mget", parameters.getParams(), entity);
363+
return new Request(HttpPost.METHOD_NAME, "/_mget", parameters.getParams(), entity);
364364
}
365365

366366
static Request index(IndexRequest indexRequest) {
@@ -449,17 +449,17 @@ static Request search(SearchRequest searchRequest) throws IOException {
449449
if (searchRequest.source() != null) {
450450
entity = createEntity(searchRequest.source(), REQUEST_BODY_CONTENT_TYPE);
451451
}
452-
return new Request(HttpGet.METHOD_NAME, endpoint, params.getParams(), entity);
452+
return new Request(HttpPost.METHOD_NAME, endpoint, params.getParams(), entity);
453453
}
454454

455455
static Request searchScroll(SearchScrollRequest searchScrollRequest) throws IOException {
456456
HttpEntity entity = createEntity(searchScrollRequest, REQUEST_BODY_CONTENT_TYPE);
457-
return new Request("GET", "/_search/scroll", Collections.emptyMap(), entity);
457+
return new Request(HttpPost.METHOD_NAME, "/_search/scroll", Collections.emptyMap(), entity);
458458
}
459459

460460
static Request clearScroll(ClearScrollRequest clearScrollRequest) throws IOException {
461461
HttpEntity entity = createEntity(clearScrollRequest, REQUEST_BODY_CONTENT_TYPE);
462-
return new Request("DELETE", "/_search/scroll", Collections.emptyMap(), entity);
462+
return new Request(HttpDelete.METHOD_NAME, "/_search/scroll", Collections.emptyMap(), entity);
463463
}
464464

465465
static Request multiSearch(MultiSearchRequest multiSearchRequest) throws IOException {
@@ -471,7 +471,7 @@ static Request multiSearch(MultiSearchRequest multiSearchRequest) throws IOExcep
471471
XContent xContent = REQUEST_BODY_CONTENT_TYPE.xContent();
472472
byte[] source = MultiSearchRequest.writeMultiLineFormat(multiSearchRequest, xContent);
473473
HttpEntity entity = new ByteArrayEntity(source, createContentType(xContent.type()));
474-
return new Request("GET", "/_msearch", params.getParams(), entity);
474+
return new Request(HttpPost.METHOD_NAME, "/_msearch", params.getParams(), entity);
475475
}
476476

477477
private static HttpEntity createEntity(ToXContent toXContent, XContentType xContentType) throws IOException {

client/rest-high-level/src/test/java/org/elasticsearch/client/RequestTests.java

Lines changed: 23 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,11 @@
2020
package org.elasticsearch.client;
2121

2222
import org.apache.http.HttpEntity;
23+
import org.apache.http.client.methods.HttpDelete;
24+
import org.apache.http.client.methods.HttpGet;
25+
import org.apache.http.client.methods.HttpHead;
26+
import org.apache.http.client.methods.HttpPost;
27+
import org.apache.http.client.methods.HttpPut;
2328
import org.apache.http.entity.ByteArrayEntity;
2429
import org.apache.http.entity.ContentType;
2530
import org.apache.http.entity.StringEntity;
@@ -138,19 +143,19 @@ public void testPing() {
138143
assertEquals("/", request.getEndpoint());
139144
assertEquals(0, request.getParameters().size());
140145
assertNull(request.getEntity());
141-
assertEquals("HEAD", request.getMethod());
146+
assertEquals(HttpHead.METHOD_NAME, request.getMethod());
142147
}
143148

144149
public void testInfo() {
145150
Request request = Request.info();
146151
assertEquals("/", request.getEndpoint());
147152
assertEquals(0, request.getParameters().size());
148153
assertNull(request.getEntity());
149-
assertEquals("GET", request.getMethod());
154+
assertEquals(HttpGet.METHOD_NAME, request.getMethod());
150155
}
151156

152157
public void testGet() {
153-
getAndExistsTest(Request::get, "GET");
158+
getAndExistsTest(Request::get, HttpGet.METHOD_NAME);
154159
}
155160

156161
public void testMultiGet() throws IOException {
@@ -200,7 +205,7 @@ public void testMultiGet() throws IOException {
200205
}
201206

202207
Request request = Request.multiGet(multiGetRequest);
203-
assertEquals("GET", request.getMethod());
208+
assertEquals(HttpPost.METHOD_NAME, request.getMethod());
204209
assertEquals("/_mget", request.getEndpoint());
205210
assertEquals(expectedParams, request.getParameters());
206211
assertToXContentBody(multiGetRequest, request.getEntity());
@@ -240,7 +245,7 @@ public void testDelete() {
240245
}
241246

242247
public void testExists() {
243-
getAndExistsTest(Request::exists, "HEAD");
248+
getAndExistsTest(Request::exists, HttpHead.METHOD_NAME);
244249
}
245250

246251
private static void getAndExistsTest(Function<GetRequest, Request> requestConverter, String method) {
@@ -318,7 +323,7 @@ public void testCreateIndex() throws IOException {
318323
Request request = Request.createIndex(createIndexRequest);
319324
assertEquals("/" + indexName, request.getEndpoint());
320325
assertEquals(expectedParams, request.getParameters());
321-
assertEquals("PUT", request.getMethod());
326+
assertEquals(HttpPut.METHOD_NAME, request.getMethod());
322327
assertToXContentBody(createIndexRequest, request.getEntity());
323328
}
324329

@@ -367,7 +372,7 @@ public void testPutMapping() throws IOException {
367372
assertEquals(endpoint.toString(), request.getEndpoint());
368373

369374
assertEquals(expectedParams, request.getParameters());
370-
assertEquals("PUT", request.getMethod());
375+
assertEquals(HttpPut.METHOD_NAME, request.getMethod());
371376
assertToXContentBody(putMappingRequest, request.getEntity());
372377
}
373378

@@ -384,7 +389,7 @@ public void testDeleteIndex() {
384389
Request request = Request.deleteIndex(deleteIndexRequest);
385390
assertEquals("/" + String.join(",", indices), request.getEndpoint());
386391
assertEquals(expectedParams, request.getParameters());
387-
assertEquals("DELETE", request.getMethod());
392+
assertEquals(HttpDelete.METHOD_NAME, request.getMethod());
388393
assertNull(request.getEntity());
389394
}
390395

@@ -403,7 +408,7 @@ public void testOpenIndex() {
403408
StringJoiner endpoint = new StringJoiner("/", "/", "").add(String.join(",", indices)).add("_open");
404409
assertThat(endpoint.toString(), equalTo(request.getEndpoint()));
405410
assertThat(expectedParams, equalTo(request.getParameters()));
406-
assertThat(request.getMethod(), equalTo("POST"));
411+
assertThat(request.getMethod(), equalTo(HttpPost.METHOD_NAME));
407412
assertThat(request.getEntity(), nullValue());
408413
}
409414

@@ -420,7 +425,7 @@ public void testCloseIndex() {
420425
StringJoiner endpoint = new StringJoiner("/", "/", "").add(String.join(",", indices)).add("_close");
421426
assertThat(endpoint.toString(), equalTo(request.getEndpoint()));
422427
assertThat(expectedParams, equalTo(request.getParameters()));
423-
assertThat(request.getMethod(), equalTo("POST"));
428+
assertThat(request.getMethod(), equalTo(HttpPost.METHOD_NAME));
424429
assertThat(request.getEntity(), nullValue());
425430
}
426431

@@ -434,9 +439,9 @@ public void testIndex() throws IOException {
434439

435440
Map<String, String> expectedParams = new HashMap<>();
436441

437-
String method = "POST";
442+
String method = HttpPost.METHOD_NAME;
438443
if (id != null) {
439-
method = "PUT";
444+
method = HttpPut.METHOD_NAME;
440445
if (randomBoolean()) {
441446
indexRequest.opType(DocWriteRequest.OpType.CREATE);
442447
}
@@ -571,7 +576,7 @@ public void testUpdate() throws IOException {
571576
Request request = Request.update(updateRequest);
572577
assertEquals("/" + index + "/" + type + "/" + id + "/_update", request.getEndpoint());
573578
assertEquals(expectedParams, request.getParameters());
574-
assertEquals("POST", request.getMethod());
579+
assertEquals(HttpPost.METHOD_NAME, request.getMethod());
575580

576581
HttpEntity entity = request.getEntity();
577582
assertTrue(entity instanceof ByteArrayEntity);
@@ -685,7 +690,7 @@ public void testBulk() throws IOException {
685690
Request request = Request.bulk(bulkRequest);
686691
assertEquals("/_bulk", request.getEndpoint());
687692
assertEquals(expectedParams, request.getParameters());
688-
assertEquals("POST", request.getMethod());
693+
assertEquals(HttpPost.METHOD_NAME, request.getMethod());
689694
assertEquals(xContentType.mediaTypeWithoutParameters(), request.getEntity().getContentType().getValue());
690695
byte[] content = new byte[(int) request.getEntity().getContentLength()];
691696
try (InputStream inputStream = request.getEntity().getContent()) {
@@ -896,6 +901,7 @@ public void testSearch() throws Exception {
896901
endpoint.add(type);
897902
}
898903
endpoint.add("_search");
904+
assertEquals(HttpPost.METHOD_NAME, request.getMethod());
899905
assertEquals(endpoint.toString(), request.getEndpoint());
900906
assertEquals(expectedParams, request.getParameters());
901907
assertToXContentBody(searchSourceBuilder, request.getEntity());
@@ -934,6 +940,7 @@ public void testMultiSearch() throws IOException {
934940

935941
Request request = Request.multiSearch(multiSearchRequest);
936942
assertEquals("/_msearch", request.getEndpoint());
943+
assertEquals(HttpPost.METHOD_NAME, request.getMethod());
937944
assertEquals(expectedParams, request.getParameters());
938945

939946
List<SearchRequest> requests = new ArrayList<>();
@@ -957,7 +964,7 @@ public void testSearchScroll() throws IOException {
957964
searchScrollRequest.scroll(randomPositiveTimeValue());
958965
}
959966
Request request = Request.searchScroll(searchScrollRequest);
960-
assertEquals("GET", request.getMethod());
967+
assertEquals(HttpPost.METHOD_NAME, request.getMethod());
961968
assertEquals("/_search/scroll", request.getEndpoint());
962969
assertEquals(0, request.getParameters().size());
963970
assertToXContentBody(searchScrollRequest, request.getEntity());
@@ -971,7 +978,7 @@ public void testClearScroll() throws IOException {
971978
clearScrollRequest.addScrollId(randomAlphaOfLengthBetween(5, 10));
972979
}
973980
Request request = Request.clearScroll(clearScrollRequest);
974-
assertEquals("DELETE", request.getMethod());
981+
assertEquals(HttpDelete.METHOD_NAME, request.getMethod());
975982
assertEquals("/_search/scroll", request.getEndpoint());
976983
assertEquals(0, request.getParameters().size());
977984
assertToXContentBody(clearScrollRequest, request.getEntity());

client/rest-high-level/src/test/java/org/elasticsearch/client/RestHighLevelClientTests.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -179,7 +179,7 @@ public void testSearchScroll() throws IOException {
179179
assertEquals(5, searchResponse.getTotalShards());
180180
assertEquals(5, searchResponse.getSuccessfulShards());
181181
assertEquals(100, searchResponse.getTook().getMillis());
182-
verify(restClient).performRequest(eq("GET"), eq("/_search/scroll"), eq(Collections.emptyMap()),
182+
verify(restClient).performRequest(eq("POST"), eq("/_search/scroll"), eq(Collections.emptyMap()),
183183
isNotNull(HttpEntity.class), argThat(new HeadersVarargMatcher(headers)));
184184
}
185185

0 commit comments

Comments
 (0)