Despite the time spent on the client / server is indeed asynchronous (a short simple request may invoke a long server-side response), the use of asynchronous request is incorrectly used in 18.6 and 19.1. You also address blocking, which really means "synchronous," so this is important to keep aligned.
18.6
_a request ... is asynchronous, meaning ...
This should be is synchronous, meaning your program waits for a response from the server before continuing.
19.1
The above process is known as an asynchronous request and response
This should be The above process is known as a synchronous request and response, because the client waits until the server responds before sending another message.
imagine if you were to use asynchronous...
This should be imagine if you were to use synchronous...
...a different type of connection is used, a synchronous one...
This should be ...a different type of connection is used, an asynchronous one...
Synchronous communication is also necessary for live...
This should be Asynchronous communication is also necessary for live...
fig. 19.1 Left diagram should be Synchronous request.
I think you can essentially swap your use of synchronous/asynchronous without causing the need for any additional elaboration.