Браузеры бездействуют перед отправкой POST-тела - PullRequest
1 голос
/ 18 октября 2011

У меня очень интересное поведение со стороны случайных клиентов на сайте.Я вижу, что случайные POST-запросы к серверу приводят к неправильному запросу к бэкэнду.Я выяснил, почему запрос плохой, но я до сих пор не знаю, ПОЧЕМУ это происходит.

  1. Клиент подключается к веб-серверу по HTTP.
  2. Клиент отправляет заголовкиобычный POST-запрос (не тело)
  3. Проход пяти секунд.Сервер кэширования передает запрос своему бэкэнду, поскольку для его выполнения потребовалось слишком много времени.
  4. Сервер кэширования отвечает клиенту с сообщением об ошибке, указывающим, что запрос был неверным.
  5. Клиент отправляет POST-тело - через несколько секунд после получения ответа.

У меня нет проблем с принятием того, что сервер кэша можно перенастроить для более длительного ожидания.Моя проблема в том,Что может быть причиной того, что клиенты ждут несколько секунд между отправленными заголовками и отправкой POST-тела?Я не знаю ни одного случая, когда это поведение имеет смысл.

Это довольно обычный веб-сайт Magento eCommerce с настройкой Haproxy -> Varnish -> Nginx -> php5-fpm.Varnish - это компонент, который отправляет запрос в Nginx по истечении пяти секунд простоя.

  • Я проверил с помощью tcpdump / wireshark, что сервер не получает POST-тело от клиента в течение времени (также до Haproxy).
  • Я подтвердил, что этопроисходит между пользовательскими агентами и в зависимости от типа запросов (обычные формы входа в систему для обратных вызовов ajax)

У кого-нибудь есть какие-нибудь умные идеи?

ПРИМЕЧАНИЕ: я былНе уверен, что это был вопрос о переполнении стека или сбое сервера, но я считаю, что это вопрос HTTP, требующий знаний разработчика.

1 Ответ

2 голосов
/ 19 октября 2011

Сервер глючит - вам не следует отправлять частичные запросы от внешнего интерфейса к внутреннему. Возможно, что клиент ожидает ответа HTTP / 100 Continue для сервера перед передачей тела POST. Также возможно, что клиент генерирует данные POST, и по какой-то причине это заняло некоторое время.

...