Http синхронный характер

Я читал, что HTTP - это синхронный протокол. Клиент отправляет запрос и ждет ответа. Клиент дождался первого ответа перед отправкой следующего запроса. Ajax использует протокол HTTP, но в отличие от него асинхронный. Я также читал это Асинхронный запрос блоки клиента до завершения операции от здесь. Я сбит с толку, и мой вопрос:
1. что такое синхронный, когда мы говорим о протоколе HTTP?
2. Связан ли синхронный с блокировка?

3
0
1 817
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Асинхронный означает, что вы выполняете HTTP-запрос, но не ждете ответа. Вы справитесь с этим, когда он прибудет, и можете заниматься другими делами между ними. Значение: вы не блокирует ваше приложение от выполнения чего-либо еще.

С другой стороны, синхронность означает, что вы делаете запрос и ждете ответа, прежде чем делать что-либо еще. Значение: вы блокировка своему приложению не делаете ничего другого.

Ответ принят как подходящий

HTTP как протокол синхронный. Отправляете заявку, ждете ответа. В отличие от других протоколов, где вы можете быстро отправлять данные по одному и тому же соединению, не дожидаясь ответа на ваши предыдущие данные. Обратите внимание, что HTTP / 2 на самом деле больше похож на эти строки.

При этом вы можете отправлять несколько независимых HTTP-запросов параллельно через отдельные соединения. Для HTTP-запросов нет «глобальной» блокировки, это всего лишь один HTTP-запрос / ответ за открытое соединение. (и снова HTTP / 2 устраняет это ограничение.)

Теперь, с точки зрения приложения Javascript, HTTP-запрос является асинхронным. Это означает, что Javascript отправит HTTP-запрос на сервер, и его ответ будет приходить некоторое время спустя. Тем временем Javascript может продолжать работать над другими вещами, и когда приходит HTTP-ответ, он продолжит работать над этим. Это асинхронное выполнение Javascript. Javascript мог выбирает дождаться ответа HTTP, блокировка все остальное тем временем; но это довольно плохо, поскольку ответ HTTP может принимать относительная вечность по сравнению со всеми другими вещами, которые вы могли бы сделать за это время (например, поддерживать отзывчивость пользовательского интерфейса).

Большое спасибо @deceze, могу ли я теоретически использовать одно HTTP-соединение для выполнения всего запроса (после получения предыдущего ответа)?

HKIT 10.09.2018 10:02

Если вы выполняете один запрос за другим, браузер, скорее всего, повторно использует существующее TCP-соединение, если оно существует. Однако это все равно будет намного медленнее, чем выполнение нескольких параллельных запросов. В коде вашего приложения вам вообще не нужно об этом беспокоиться; браузер будет управлять количеством параллельных подключений, которые он может / будет делать одновременно.

deceze 10.09.2018 15:03

Большое спасибо, отличный ответ

HKIT 11.09.2018 11:57

Другие вопросы по теме