
HTML + JS - Proč někde data získám a někde ne ?
Ahoj,
Mám router, v routeru je zapojeno kabelem PC.
V PC mám nainstalovaný VirtualBox, ve VirtualBoxu beží Linux a na Linuxu Apache (IP: 192.168.0.105).
Pak mám v routeru připojen fyzický server který má IP 192.168.0.108.
Když zadám v PC do url 192.168.0.108 vrátí se mi nějaký text.
Když ale vytvořím index.html na serveru který běží ve VirtualBoxu (IP: 192.168.0.105) a do něj vložím
<!DOCTYPE html>
<html>
<head>
<script>
function test(){
var xhr = window.ActiveXObject ? new ActiveXObject("Microsoft.XMLHTTP") : new XMLHttpRequest();
xhr.onreadystatechange = function (){
if (xhr.readyState == 4) alert(xhr.responseText);
};
xhr.open("GET", 'http://192.168.0.108');
xhr.send();
}
test();
</script>
</head>
<body>
</body>
</html>
nedostanu vůbec nic, alert je prázdný. Proč, přece netahám data z jiné domény.. Jsem stále ve stejné síti. za radu předem děkuji ?
Stejná síť, ale jiná adresa. To je to samé, jako by to byla jiná doména.
Bez urážky, to víš nebo si to mysliš ?
To vím. Prohlížeči je nějaká místní síť ukradená, porovnává pouze adresy.
Jen se ptám.. pokud je to pravda, nechápu, proč to třeba v tabletu připojeném přes wifi normálně funguje... IP je taky jiná...
Teď jsme si asi nerozuměli. Prohlížeč nedovoluje pomocí AJAXu načítat data z jiné adresy, než ze které byla načtena stránka. Pokud načítá ze stejné adresy, je úplně jedno, na jaké adrese ta stránka je.
Rozumíme si zatím dobře, server který vrací data má IP 192.168.0.108.
HTML + JS kterým chci načíst ta data má IP vždy jinou. (což nefunguje, ale to jsi zdůvodnil.. OK)
Ale jak jsem psal, když to HTML + JS spustím v tabletu na kterém běží Android, data z IP 192.168.0.108 okamžitě získám. Což právě vyvrací tvé tvrzení.
A jaký tam máš prohlížeč? Ne všechny musí mít tuhle bezpečnostní pojistku implementovanou.
Tak to netuším v čem to Cordova spouští. Teď jsem ještě zjistil, že to dokonce funguje přímo i v XDK-čku od Intelu, tak ta data získám...
Mohlo by to fungovat všude, pokud si na serveru správně nastavíš CORS.
Tudy cesta nevede, CORS na tom serveru nastavit nejde... konfigurace se změnit nedá..
Tak zkus ještě JSONP.
Hm, ty to chápeš jak je to myšleno ? Asi ano když jsi mi to poslal.. Já to nechápu, můžeš o trošičku zvešobecnit ? Byl bych ti moc vděčný..
To jsem se tam dočetl taky...
Problém je, že to nechápu...
Prostě si na stránku přidáš tag script, který ti zajistí načtení dat, která potřebuješ. Ty data ale musí ze serveru přijít už "zabalená" ve volání nějaké funkce, kterou máš na své stránce. Takže se bez určité spolupráce se serverem opět nevyhneš.
Už tomu rozumím, díky. To taky není možné, neexistuje žádný způsob jak to v tom HW upravit.
Řešení by bylo někam vecpat další php server, jelikož php server někde na webu je taky problém, musí to být vše na interní síti a musí to fungovat i když nepojede net.. Nějaký nápad ?
Proč to vůbec musí načítat data z jiné adresy, než kde běží webový server?
Asi takto, ten HW na IP 192.168.0.108 co vrací ta data je monoblok, do kterého připojíš RJ45 konektor, připojíš napájení + nějaké čidla ze kterých to tiskne ty texty. Co na tom běží neví ani ten číňan co to sestrojil. Jinak žádné nastavení není možné natož tam nahrát nějaký html kód
Dobrá, ale ty stránka už snad běží na nějakém normálním webovém serveru, ne? A server může číst z jiných serverů, výše zmíněné omezení se týká pouze AJAXu.
Teď jsem moc nepochopil jakou stánku přesně myslíš.
Data z toho .108 si vytahuj pomocou PHP na serveri, a ne javascriptami od klienta. Preco to nerobis tak?
Proč to nedělám tak je z více důvodů. Tam kde to zařízení ..108 je, nebude internetové připojení a v interní sítí toho routeru není žádný php server.
Tak si tam php server nainstaluj.
Inac nechapem jak chces z JS pristupovat na nieco co nema internetove pripojeni, klient s JS ide rovno na .108
Stránka, na které máš ten skript.
Aha, tak není na serveru, jedná se jen o html soubry které jdou spustit kdekoli v PC v prohlížeči.