When a consumer (or client) invokes a provider's service that has a long time processing, a synchronous call is not a good option. This kind of communication blocks the consumer until the response arrives, and, besides, the invocation timeout can be reached raising a timeout error. Hence, an asynchronous call is more appropriate where the consumer calls the provider's service and continues processing, and, when the provider's service finishes it pushes the response to the consumer. There are different ways for implementing an asynchronous communication. A simple way is the consumer providing a callback function which the provider's service invokes when it finishes the processing, performing a server push operation. However, there are many cases where this solution cannot be applied requiring other alternatives, e.g.: the consumer keeps up with the service execution checking for its readiness or state, and when it finishes, it calls another provider's service to get the result; the consumer and provider keep an open connection for the asynchronous communication. This work analyzes the main server push technologies used for web development, presenting their weaknesses and strengths, and the existing main challenges. As a result, we provide a technologies comparison, and a classification based on multiple qualitative dimensions that helps one to choose the technology that fits its requirements and/or can be used to guide future researches in this field.