2010-08-25 18 views
15

Ich habe einige lokale html/js-Dateien, mit denen ich einige Remote-Server über https aufrufen und schließlich Basic-Authentifizierung für die Anfrage verwenden möchte.Basis-Authentifizierung mit jQuery.ajax Anfrage und Jsonp

Ich stoße auf zwei Probleme. Erste ist, dass, wenn ich nicht angeben ‚JSONP‘ für den Datentyp, jQuery.ajax() Anforderung gibt den Fehler:

Access to restricted URI denied code: 1012

Sind meine Anfragen Cross-Domain in Betracht gezogen, weil meine Hauptarbeitsdatei lokal gespeichert ist, aber Daten von einem Server woanders abrufen?

So gut, ich den Anruf zu aktualisieren, so dass es nun wie folgt aussieht:

$.ajax({ 
    url: myServerUrl, 
    type: "GET", 
    dataType: "jsonp", // considered a cross domain Ajax request if not specified 
    username: myUsername, 
    password: myPassword, 

    success: function(result) 
    { 
     // success handling 
    }, 
    error: function(req, status, errThrown){ 
     // error handling 
    } 
}) 

Weil ich die Standardauthentifizierung verwenden müssen, ich bin in der Benutzername/Passwort vorbei, aber wenn ich überwachen die Anfrage, ich don Es wird nicht gesetzt und zusätzlich sendet der Server eine Fehlerantwort, da er nicht die erwarteten Informationen hat.

Zusätzlich, da ich jsonp eingestellt habe, wird beforeSend nicht aufgerufen.

Wie gebe ich die Anmeldeinformationen mithilfe der Standardauthentifizierung für diese Anforderung weiter?

Antwort

12

Die kurze Version ist nicht möglich. Ihr Verdacht ist richtig, weil Sie lokal sind und diese Dateien sind remote, Sie können nicht darauf zugreifen, Sie werden von der same-origin policy blockiert. Die Umgehung dafür ist JSONP, aber das scheint wirklich nicht auf Ihre Situation zutreffen ...

JSONP funktioniert anders, es ist eine GET-Anfrage über eine <script> Tag-Include, um die Datei zu bekommen, also bist du keine speziellen Header oder irgendetwas senden.

Sie müssen die Anforderung über den Server, auf dem Sie sich befinden (die Domäne, in der dieses Skript ausgeführt wird) oder eine andere Proxyoption ausführen. Der Wechsel vom Client zu einer anderen Domäne wird jedoch hauptsächlich aus Sicherheitsgründen blockiert.

+5

Dies ist die richtige Antwort, JSONP kann die USER/PWD-Header nicht enthalten, die Basic Auth erfordert. Also du bist verdammt, wenn du es tust und verdammt, wenn du es nicht tust :) –

0

Ich denke, Sie müssen einen Server-Proxy irgendeiner Art hinzufügen. JSONP ist nur eine spezielle Möglichkeit, ein Skript-Tag zu verwenden. Daher können keine willkürlichen Header festgelegt werden. Und natürlich können Sie kein Cross-Origin-XHR machen.

7

Versuchen Sie, http://user:[email protected] zu tun. Dies ahmt eine Basic-Auth-Anfrage nach.

+2

das scheint zu funktionieren, aber nur für einige Browser. – jhanifen

+1

Die Verwendung dieser Syntax wird in Chrom von Build M59 blockiert: https://www.chromestatus.com/feature/5669008342777856 – Beejamin