Müssen Sie einen REST GET-Aufruf mit Basic Auth von einem Javascript (in www.domain1.com) machen. Die REST-API befindet sich in domain2.com. Die REST-API kehrt mit den CORS-spezifischen HTTP-Headern zurück. Ich muss IE, Chrome und Firefox unterstützen. Unten erklärt JavaScript das Problem weiter -
Ohne Basic Auth (funktioniert in IE 10, Chrome und Firefox, kümmert sich um ältere IEs durch XDomainRequest-Objekt)
%Vor%Mit Basic Auth (funktioniert nur in IE 10, schlägt in Chrome und Firefox fehl)
%Vor%Mit Basic Auth (schlägt in Chrome und Firefox fehl)
%Vor%Mit Basic Auth (schlägt in Chrome und Firefox fehl)
%Vor%Ich würde hier gerne eine Lösung finden, die in Chrome und FireFox mit Basic Auth funktioniert.
Es wurde gelöst. Bemerkenswert ist, dass der Browser diese domainübergreifenden Aufrufe mit Authentifizierung in 2 Schritten durchführt - ein Preflight-Aufruf vor der eigentlichen Anfrage. Die Art dieses Preflight-Anrufs unterscheidet sich in IE und [Chrome + Firefox]. IE macht einen HTTP-GET-Preflight-Aufruf, und es kommt mit 401 zurück und dann sendet es die Authentifizierungsdetails in der tatsächlichen Anfrage. Aber Chrome und Firefox nehmen einen viel sichereren Ansatz, indem sie einen HTTP-OPTIONS-Aufruf durchführen, um zu prüfen, welche Dinge der Webserver als CORS unterstützt (welche Domänen sind zulässig / unterstützt GET / POST usw.) und der nächste Aufruf geht mit der eigentlichen HTTP-GET-Anfrage mit Authentifizierung.
Leider wurde die API-Seite so codiert, dass sie jeden HTTP-Aufruf authentifizierte. Deshalb kam auch der Aufruf von HTTP OPTIONS mit 401 zurück. [Chrome + Firefox] gab direkt nach dem Preflight-Aufruf eine Ausnahme aus.
In der API-Seite wurde der Code so geändert, dass er 401 bei OPTIONS-Aufrufen nicht zurückgibt, und er hat damit begonnen zu arbeiten.
Tags und Links jquery xmlhttprequest