HTTP-клиент Apache генерирует исключение NoHttpResponseException при перезагрузке Nginx для POST - PullRequest
1 голос
/ 19 марта 2019

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

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

    @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 && 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 работают правильно.Перепробовал много версий, но, похоже, осталось.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...