It is World War I, in 1916, and the Italian army is trying to hold off the united forces of Austria and Germany. The narrator, Lieutenant Frederic Henry, is an American who has joined the Italian ambulance corps as a volunteer. As the novel opens, Henry is about to take his winter leave. He spends the evening with his fellow officers, who mock the regiment's priest for his celibacy. Then the officers go to the officers' brothel for the night.
When Henry returns from leave, his roommate Rinaldi introduces him to two English nurses, Catherine Barkley and Helen Ferguson, and although Rinaldi had been interested in Catherine, the immediate chemistry between her and Henry is obvious. On their first meeting, she tells him the sad story of her fiancé who was killed in the war, whose riding crop she still carries. As their flirting deepens in the following days, Henry is able to coax kisses from her, and she asks him to say he loves her before acknowledging that this is only a game.
Soon, Henry goes to the first major battle in which he has taken part. He is innocently eating macaroni and cheese with the other ambulance drivers when a mortar shell crashes through his bunker, killing a driver and injuring Henry's leg. Henry is taken to an American hospital in Milan for treatment. When he arrives, he discovers the hospital is badly managed and the doctors are incompetent. Fortunately one doctor, Valentini, is able to remove the shrapnel from Henry's leg. While Henry is recuperating, Catherine Barkley is transferred to the hospital and when Henry sees her again, he realizes he loves her. She begins to sneak into his room at night and they conduct a love affair all summer. But Henry eventually has to return to the front. Before he leaves, Catherine tells him she is pregnant with his child.
Henry returns to Gorizia and is plunged into battle. The Austrian and German armies have broken through the Italian lines, and a massive retreat from the front begins. Since the main road is blocked with so many vehicles, Henry and his ambulance drivers try to cut across the countryside. They become stuck in the mud, and two sergeants they have picked up try to flee rather than help. Henry shoots at them, hitting one. Another ambulance driver, Bonello, executes the sergeant with a bullet to the head. When they reach the Tagliamento River, there is a cordon of Italian military police who, out of paranoia and misguided patriotism, are shooting their own officers for having retreated. Henry escapes by diving into the river. He makes his way back to Milan, having decided that he will no longer fight for the Italian army or participate in the war.
Henry learns that Catherine is in the Italian town of Stresa, a resort town near the Swiss border. He goes there, and he and Catherine reunite. Soon, Henry learns from a friendly bartender that the military police are coming to arrest him for desertion. He and Catherine escape across Lake Maggiore to Switzerland, where they successfully pass for tourists and receive visas to stay.
In Switzerland, Henry and Catherine live outside the quiet ski town of Montreux, waiting for Catherine's baby to arrive and utterly content with each other's company. They go on holiday to the nearby town of Lausanne to be closer to the hospital. When Catherine's contractions begin, Henry takes her to the hospital. As the day progresses, it is clear that Catherine's labor is becoming increasingly complicated and dangerous. The doctors try to give her a Caesarian operation, but the baby is stillborn and Catherine eventually dies of multiple hemorrhages. Henry, now alone, walks back to his hotel in the rain.