If client intends to send a POST request with request body large enough to try to avoid wasting bandwidth (in case server might reply with 3xx,4xx or 5xx), the client will send only headers including "Expect: 100-continue" header, then server indenting to reply with "200 OK", will instead first reply with "100 Continue" than client will send POST body, and finally server sends "200 OK".
[1] https://www.w3.org/Protocols/rfc2616/rfc2616-sec8.html#sec8....
Also the exchange seems to be subtly different for each of them:
100 Continue: Client sends start of request, server sends 100, client sends rest of request.
101 Switching Protocols: Client sends request, server sends 101, client sends non-http request.
103 Early Hints: Client sends request, server sends 103, server sends response.