Как XMLHttpRequest знает, когда вызывать его обратный вызов?
-
22-07-2019 - |
Вопрос
Из того, что я понимаю, если код javascript на стороне клиента использует запрос XMLHttpRequest для выполнения запроса POST, он ожидает ответа, а после завершения меняет свое состояние готовности на ReadyState.Complete и вызывает функцию обратного вызова.
Мой вопрос: как он определяет, что ответ завершен? Возвращает ли он содержимое первого полученного TCP-пакета? Или сервер закрывает соединение tcp и завершает транзакцию? Или в содержимом пакета TCP есть что-то особенное, что сообщает объекту XMLHttpRequest, что ответ завершен?
Решение
Он либо ждет, пока сервер закроет свое соединение, либо ожидает, пока не будет прочитано количество байтов из ответа, равное заголовку Content-Length в ответе.
Другие советы
Это соответствует спецификации HTTP. Ответ должен содержать кодировку контента Content-Length
или использовать кодировку контента chunked
. В HTTP / 1.0 закрытие соединения также возможно.