Avaleht
uus teema   vasta Tarkvara »  WWW »  Ajax cross domain request märgi kõik teemad loetuks
märgi mitteloetuks
vaata eelmist teemat :: vaata järgmist teemat
Hinnavaatlus :: Foorum :: Uudised :: Ärifoorumid :: HV F1 ennustusvõistlus :: Pangalink :: Telekavad :: HV toote otsing
autor
sõnum Saada viide sõbrale.  :: Teata moderaatorile teata moderaatorile
otsing:  
eternity
HV kasutaja

liitunud: 20.11.2008




sõnum 15.01.2015 16:39:04 Ajax cross domain request vasta tsitaadiga

Tere, mure siis järgmine:

Kliendi poolelt saadetakse form data jquery abil POSTiga siis vastuvõtvasse api serverisse, mis asub mujal ja millele ligpääsuks on vaja läbida basic auth.
Probleem tuleb mängu siis kui tahta lisada auth info headerisse, sest peale seda hakkab ta tegema preflight requesti serverile ennem õiget requesti.
Kuna aga preflight requestile auth headereid ei lisa, siis lükkab api requesti tagas erroriga No acces-control-allow-origin header was present ja katkestab autendi.
Selle peale sai ka küsitud serverihaldajalt, kas serveri confis on välised ühendused lubatud ja nende sõnul peaks sealtpoolt asi korras olema.
Probleem on ka selles, et ise serverile ligipääsu ei oma nii, et midagi sealtpoolt muuta ei saa.

Küsimus seisneb nüüd seisnebki selles, et kas on võimalik preflighti ise autentida kuidagimoodi või siis preflighti bypassida kuidagi (mis ei oleks proxy põhine lahendus ja mitte ka jsonp kuna on vaja POSTi kasutada)?

Igasugune abi oleks teretulnud.
Client-side ajax string on selline:

$(document).ready(function () {
           
        var options = {
            target: '#response',   
            success: showResponse,
            beforeSend: function (xhr) {
                xhr.setRequestHeader('Authorization', "Basic xxxxxxxxx");
                xhr.setRequestHeader("Content-Type", "multipart/form-data");
    },
            xhrFields: {
      withCredentials: true
    },
            contentType: 'multipart/form-data',
            url: 'targeturl',
            type: 'post',
            crossDomain: true,
            cache: false,
            async: false;
            dataType: 'json'   
        };
        $('#myForm2').submit(function () {
            $(this).ajaxSubmit(options);
            return false;
        });
    });
Kommentaarid: 34 loe/lisa Kasutajad arvavad:  :: 1 :: 0 :: 30
tagasi üles
vaata kasutaja infot saada privaatsõnum
Redikate
HV veteran
Redikate

liitunud: 30.12.2005




sõnum 15.01.2015 16:58:41 vasta tsitaadiga

Puhtalt API konfimise teema. Ainuke asi mida sina teha saaks, oleks proxyda.
Nemad peavad CORS'i confima tööle ka OPTIONS requesti jms asjadega, siis ongi timm.

Access-Control-Allow-Methods: POST, GET, OPTIONS


Ma selle probleemi otsa astusin, siis lahendasin selle expressJS'iga ise proxy tehes. Vabalt võib ka muidugi nginx jms kasutada.

Seda mis API'st täpselt puudu on, peaksid nägema requestist. Access-Control headerid ja nende väärtused peavad sulle sealt vastu tulema.

_________________
http://nodejs.org/
"I'm also a person. Programming is just one thing I do."


viimati muutis Redikate 15.01.2015 17:06:17, muudetud 2 korda
Kommentaarid: 34 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 33
tagasi üles
vaata kasutaja infot saada privaatsõnum
eternity
HV kasutaja

liitunud: 20.11.2008




sõnum 15.01.2015 17:03:33 vasta tsitaadiga

Tänud vastuse eest.
Eks ma ürita seda siis serverihaldajale selgeks teha.
Kommentaarid: 34 loe/lisa Kasutajad arvavad:  :: 1 :: 0 :: 30
tagasi üles
vaata kasutaja infot saada privaatsõnum
Redikate
HV veteran
Redikate

liitunud: 30.12.2005




sõnum 15.01.2015 17:10:37 vasta tsitaadiga

Korra veel läbi lugedes, tundub et API's on hoopis OPTIONS valesti confitud. OPTIONS req ei tohiks olla basic authitud, sest W3C spec ütleb, et preflightiga ei panda authi kaasa.

Seega browser lihtsalt ei saada authorization headerit kaasa ja seega ka auth failib.

_________________
http://nodejs.org/
"I'm also a person. Programming is just one thing I do."
Kommentaarid: 34 loe/lisa Kasutajad arvavad:  :: 0 :: 0 :: 33
tagasi üles
vaata kasutaja infot saada privaatsõnum
näita postitusi alates eelmisest:   
uus teema   vasta Tarkvara »  WWW »  Ajax cross domain request
[vaata eelmist teemat] [vaata järgmist teemat]
 lisa lemmikuks
näita foorumit:  
 ignoreeri teemat 
sa ei või postitada uusi teemasid siia foorumisse
sa ei või vastata selle foorumi teemadele
sa ei või muuta oma postitusi selles foorumis
sa ei või kustutada oma postitusi selles foorumis
sa ei või vastata küsitlustele selles foorumis
sa ei saa lisada manuseid selles foorumis
sa võid manuseid alla laadida selles foorumis



Hinnavaatlus ei vastuta foorumis tehtud postituste eest.