Când WinHTTP alternează între 407 și 401
Păstrați starea de autentificare a proxy-ului aleasă și reaplicați-o înainte de reîncercări, tratând separat provocarea destinației.
O cerere WinHTTP se autentifică la proxy, primește 401 de la un site și apoi primește încă un 407 la următoarea trimitere. Proxy-ul și site-ul au stări de autentificare separate, iar calea de retrimitere trebuie să le păstreze pe ambele.
Exemplul nativ de autentificare WinHTTP de la Microsoft păstrează schema de proxy aleasă într-o variabilă și reaplică contul de proxy înainte de fiecare WinHttpSendRequest după ce acea schemă a fost selectată.
- Trimiteți cererea și inspectați răspunsul.
- Pentru un 407, interogați schemele oferite și rețineți schema de proxy aleasă.
- Înainte de retrimitere, apelați WinHttpSetCredentials pentru WINHTTP_AUTH_TARGET_PROXY cu acea schemă și acel cont.
- Pentru un 401 de la destinație, obțineți schema acesteia și setați credențialele serverului, păstrând starea de proxy memorată pentru următoarea trimitere.
Exemplul menționează în mod specific reautentificarea după o provocare a serverului sau o redirecționare ca motiv pentru reaplicarea credențialelor proxy. Plasarea apelului doar în prima ramură 407 poate lăsa o altă cale de reîncercare fără configurarea așteptată.
Verificați fiecare rezultat API și limitați eșecurile repetate. Exemplul compact al Microsoft urmărește starea anterioară, iar o politică de reîncercare din producție ar trebui să recunoască și o secvență alternantă repetată.
Dacă utilizatorul furnizează un cont de înlocuire după un eșec, actualizați valorile folosite de acea cale de retrimitere. WinHttpSetCredentials are domeniu de aplicare cererea; nu este un depozit de parole la nivel de proces al cărui conținut să fie înlocuit pentru toate cererile viitoare.