Refused, timed out, or nothing at all
Three shapes cover most of what you will see. A refusal is fast and definite: the server answered and said no, which makes it a credentials story. A timeout is slow and vague: nothing answered in time, which makes it a host or network story. Silence, meaning a spinner or a black screen with no text, usually means the app gave up before it had anything to report. Sort your error into one of those three before you change a single field, because the fixes do not overlap.