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