In emerging applications such as industrial control and autonomous driving, end-to-end deterministic quality of service (QoS) transmission guarantee has become an urgent problem to be solved. Internet congestion control algorithms are essential to the performance of applications. However, existing congestion control schemes follow the best-effort principle of data transmission without the perception of application QoS requirements. To enable data delivery within application QoS constraints, we leverage an online learning mechanism to design Crimson, a novel congestion control algorithm in which each sender continuously observes the gap between current performance and pre-defined QoS. Crimson can change rates adaptively that satisfy application QoS requirements as a result. Across many emulation environments and real-world experiments, our proposed scheme can efficiently balance the different trade-offs between throughput, delay and loss rate. Crimson also achieves consistent performance over a wide range of QoS constraints under diverse network scenarios.