Spitting on someone is an assault. Insulting someone is not. The two things are not comparable.
You don't blame the guy for striking her after getting spit in the face?
To be clear, I wouldn't escalate anything in general, if someone cuts in line or whatever, not worth picking a fight for such silly things. But if you spit to someone in their face, getting punched is something that it's well within the realm of things you should expect. From an ethical point of view, I probably wouldn't do either, but in general spitting is what turned this uncivilized event (from both parties) into a fight.
If a guy hits me even once and I knife him in self defense,
Self-defense laws vary a lot across countries. At least where I live, defense has to be motivated and proportional. If someone would slap you - for example - and you stab them, that probably wouldn't count as self-defense. I would personally disagree with you in that context, and probably a judge would too (at least here).
Stabbing has always the risk of being fatal. No slur deserves death.
Edit: to expand to that, being motivated and proportional are two principles that I find very moral. I agree that legal and moral are not the same, but in this case I think the law is absolutely aligned with my moral. Stabbing someone for a slap or a slur is completely disproportionate and I would absolutely not consider it justified. Being assaulted and fearing from your life, that is different.