Sziasztok!
Szeretnem a segitsegeteket kerni a kovetkezo problema miatt. Tobb forumtemat is megneztem, de nem talaltam meg a megoldast. Telepitve van a gepemen egy soapUI es egy restclient firefox bongeszoben. Mind a kettoben meghivom ugya azt az API URL-t(pl: https://192.168.10.12/api/login) es megkapom a valaszt a szervertol, hogy a user autentikalva.
Ugyan ezt szeretnem megcsinalni javascriptben, de folyton hibat kapok:
Request header field Invoke-Control is not allowed by Access-Control-Allow-Headers
Rest kliensek gond nelkul elboldogulnak vele, de javascriptben jQuery post kodot vagy alap javascriptben irt XMLHttpRequestet hasznalok sosem kapok a szervertol valaszt.Firebugban ha nezem csak request van response nelkul es a hibauzenet.
Javascript code:
var PortalServer = "192.168.10.12";
var data = '{"username":"username","password":"password","siteGuids":["e7514d85"]}'
console.info('login process done');
// ajax call
function createRequest() {
var result = null;
if (window.XMLHttpRequest) {
// FireFox, Safari, etc.
result = new XMLHttpRequest();
if (typeof XMLHttpRequest.overrideMimeType != 'undefined') {
result.overrideMimeType('application/json');
}
}
else if (window.ActiveXObject) {
// MSIE
result = new ActiveXObject("Microsoft.XMLHTTP");
} else {
// No known mechanism -- consider aborting the application
}
return result;
}
var req = createRequest(); // defined above
// Create the callback:
req.onreadystatechange = function() {
if (req.readyState != 4 || req.status != 200) {
//console.error("Something went wrong!\n" + req.readyState + "\n" + req.status);
return;
}
// Request successful, read the response
console.info(req.responseText);
}
req.open("POST", PortalServer + "/api/login", true);
req.setRequestHeader("Access-Control-Allow-Origin","*");
req.setRequestHeader("Content-Type","application/json");
req.setRequestHeader("Host", PortalServer);
req.send(data);
console.info(req.responseText);
Miert tudjak a kliensek kezelni ezt a hivast es miert nem tudja a bongeszo?
Elore is koszonom a segitsegeteket!
- 2374 megtekintés
Hozzászólások
"Access-Control-Allow-Origin"-t biztos te akarod megadni headerkent? Azt szerintem majd a szerver kuldi vissza (ha akarja).
- A hozzászóláshoz be kell jelentkezni
Valoban igy van. Felesleges oda.
- A hozzászóláshoz be kell jelentkezni
A böngészőben levő javascriptből alapértelmezetten csak azt a domain-t tudod elérni, ahonnan a javascript is letöltődött. Pl. ha a javascript a http://foo.com-ról töltődött, akkor nem éri el a http://baz.com-ot.
A szerverek engedélyezhetik, hogy máshonnan letöltött javascriptek is elérjék a domain-t az Access-Control-Allow-Origin header segítségével.
Részleteket a CORS fogalmánál találod.
Szerk.:
A te esetedben, ha a javascript a 192.168.10.12 domain-ről jönne (pl. http://192.168.10.12/test/akarmi.js), akkor elvileg működne az elérés.
- A hozzászóláshoz be kell jelentkezni
Igen, mar neztem a CORS konfiguralasat. Szoval amig ezt nem konfiguralom be a tomcat serveren, addig nincs eselyem, hogy js-bol inditott rest call-al kapjak valaszt. Igy van?
- A hozzászóláshoz be kell jelentkezni
Ja... :)
...mellékesen megjegyzem, hogy ez nem valami szabványos login hívásnak néz ki, csak a szopás lesz a dologgal később...
- A hozzászóláshoz be kell jelentkezni
Lehet, hogy nem voltam egyértelmű, de két lehetőség is van:
1. A szerveroldalon a szerver program visszaadja a megfelelő Access-Control-Allow-Origin header-t.
2. Ugyanaz a domain adja vissza a js-t, amelyiken a rest hívást is el akarod érni.
A 2. eset az ajánlott.
- A hozzászóláshoz be kell jelentkezni
A "Access-Control-Allow-Origin" fejlécet a szerver küldi, ugyanis a szerver oldalon akarod szabályozni, hogy honnan hívható meg az API-d...
- A hozzászóláshoz be kell jelentkezni
Szia,
Csak egy ötlet gyanánt, de mindössze tesztelési célokra javallott, különben sebezhetőbbé teszed a saját géped: https://stackoverflow.com/questions/17711924/disable-cross-domain-web-s…
Üdv,
LuiseX
- A hozzászóláshoz be kell jelentkezni
koszi! Megnezem...
- A hozzászóláshoz be kell jelentkezni
OK, ezzel az addonnal sikerult letesztelnem, hogy a js script megfeleloen mukodik. Mar csak a tomcat szervert CORS filteret kell bekonfiguralni, hogy mukodokepes es biztonsagos legyen a kapcsolat.
Koszonom mindnekinek a segitseget!
- A hozzászóláshoz be kell jelentkezni