Странные запросы / ответы тел в Wildfly? - PullRequest
0 голосов
/ 13 декабря 2018

У меня были странные проблемы, связанные с телами запросов / ответов в моем приложении, запущенном в Wildfly.Мне кажется, что буфер где-то совместно используется несколькими потоками, обслуживающими разные запросы.

Пример тела запроса, которое должно быть JSON, пришло из моего приложения:

{TTP/1.0 200 OK
Expires: 0
Cache-Control: max-age=7200
X-Powered-By: Undertow/1
Server: WildFly/10
X-XSS-Protection: 1; mode=block
Pragma: 
X-Frame-Options: DENY
Accept-Ranges: bytes
Date: Fri, 07 Dec 2018 06:32:15 GMT
Connection: close
Last-Modified: Fri, 30 Nov 2018 17:08:34 GMT
X-Content-Type-Options: nosniff
Strict-Transport-Security: max-age=31536000 ; includeSubDomains
Content-Length: 570
Content-Type: text/html; charset=UTF-8

"-","appliedMethods":[{"uuid":"ebe163d3-c14c-4664-96a1-de8be17d462b","method":{"guid":"631e552a-e86e-44dc-8f2f-14e5b9bafa63", ... normal JSON continues

КакВы можете видеть, что тело начинается с обычного { символа, но затем оно переопределяется частью необработанного ответа от другого запроса, обслуживающего некоторый text/html.

То же самое происходит с ответами,К сожалению, я не регистрирую ответы, поэтому все, что у меня есть, это изображение:

Weird response body

Тело ответа было частично переопределено другим ответом, только на этот раз первым символомтакже получил замену.

Мой стек:

  • Клиент - angularjs 1.6.6
  • Nginx - nginx-plus-r14-p1 (1.13.7)
  • Wildfly - 10.1.0.Final
  • Spring - 4.2.4.RELEASE

Другие наблюдения, которые у меня есть:

  • Я могуизмерять только случаи с запросами, но частота появления этой проблемы крайне низка: 57 случаев из 37 806 125 сообщений, которые я в данный момент зарегистрировал.
  • angularjs, похоже, не вызывает этого, потому что:
    1. У меня была такая же проблема с 1.4.
    2. Я почти уверен, что когда запрос переопределяется, та часть, с которой он переопределяется, принадлежит запросу другого клиента.Поскольку этот клиент не может иметь эти данные, он должен происходить дальше.

Насколько я знаю, в моем приложении нет "необычного кода", которыйможет вызвать такое поведение.

Единственное, что у меня есть, что выходит за рамки стандартных @Controller вещей, - это RequestWrapper, который кэширует тела запросов для ведения журнала.Он почти идентичен org.springframework.web.util.ContentCachingRequestWrapper и, конечно, не имеет доступа к ответам.

PS Похоже, этот вопрос касается той же проблемы.

ОБНОВЛЕНИЕ: Журналы Nginx доказанычто запросы приходят нормально от клиента.

...