Perché il client HTTP invierà solo le intestazioni di autenticazione una volta rifiutata una richiesta non autenticata?

9

L'utilizzo predefinito delle classi HttpClient e HttpWebRequest .NET sta impostando la proprietà Credentials e quindi richiede all'istanza della classe di eseguire una richiesta HTTP. Se il target richiede l'autorizzazione Basic , succede quanto segue (quelle classi lo fanno sotto controllo e Fiddler mostra cosa sta succedendo):

  • la prima richiesta viene inviata senza autorizzazione intestazione
  • il server rifiuta e risponde con HTTP 401
  • il client invia di nuovo la stessa richiesta questa volta con l'intestazione Autorizzazione contenente i dati correttamente codificati dalla proprietà Credentials

e questo è il comportamento predefinito. Quindi, a meno che l'utente non convalidi la sua applicazione e prenda ulteriori passaggi, ogni richiesta viene inviata due volte - la prima è universalmente respinta.

La mia domanda è: qual è la ragione di questo comportamento predefinito? La classe client ha la sua proprietà Credentials impostata in modo tale da presupporre che l'utente voglia utilizzare tali credenziali per l'autenticazione. Perché non basta inviare l'intestazione appropriata con la prima richiesta? Farebbe quest'ultimo in qualche modo compromettere il client?

    
posta sharptooth 10.09.2014 - 09:53
fonte

1 risposta

21

Questo comportamento è specificato da RFC2617 . Il motivo per il viaggio di andata e ritorno è che il server può richiedere diversi tipi di autenticazione: base, digest, ecc. Se si sa in anticipo che il server richiede l'autenticazione di base, allora si può salvare un viaggio di andata e ritorno. Ma questo non è il default, e penso che le librerie .NET abbiano ragione a esporre questo come fanno.

    
risposta data 10.09.2014 - 10:11
fonte

Leggi altre domande sui tag