HTTP-клиент Apache выдает исключение NoHttpResponseException при перезагрузке входа Nginx для POST

#java #apache #nginx #proxy #kubernetes

#java #apache #nginx #прокси #kubernetes

Вопрос:

Когда мы перезагружаем конфигурацию Nginx Ingress, мы получаем NoHttpResponseException для некоторых наших POST-запросов. Этого не происходит ни в клиенте OkHttp, ни в обычном ab -c 100 -n 1000 https://...

Использовал 4.5.7, последнюю версию, и отключил сжатие Gzip для наглядности. Поместите точку останова в DefaultHttpResponseParser в:

     @Override
    protected HttpResponse parseHead(
            final SessionInputBuffer sessionBuffer) throws IOException, HttpException {
        //read out the HTTP status string
        int count = 0;
        ParserCursor cursor = null;
        do {
            // clear the buffer
            this.lineBuf.clear();
            final int i = sessionBuffer.readLine(this.lineBuf);
            if (i == -1 amp;amp; count == 0) {
                // The server just dropped connection on us
                throw new NoHttpResponseException("The target server failed to respond");
            }
  

При возникновении ошибки мы наблюдаем, что буфер имеет следующее содержимое:

 0

1.1 200 OK
Server: nginx/1.15.5
Date: Tue, 19 Mar 2019 08:51:27 GMT
Content-Type: application/json;charset=UTF-8
Transfer-Encoding: chunked
Connection: keep-alive
Vary: Accept-Encoding
Strict-Transport-Security: max-age=15724800; includeSubDomains

10
{"success":true}
  

Но для обычных запросов он имеет следующее содержимое, что имеет больше смысла:

 HTTP/1.1 200 OK
Server: nginx/1.15.5
Date: Tue, 19 Mar 2019 08:52:30 GMT
Content-Type: application/json;charset=UTF-8
Transfer-Encoding: chunked
Connection: keep-alive
Vary: Accept-Encoding
Strict-Transport-Security: max-age=15724800; includeSubDomains

10
{"success":true}
  

Теперь я не уверен, что не так, потому что оба okhttp и ab работают правильно. Перепробовал много версий, но, похоже, оно остается.