Pogčedajte punu verziju : Ajax & cross-subdomain problemi
bNasty
15. 01. 2007., 16:21
Upao sam u glupi problem, pa sad sumnjam i u ono shto (valjda) znam (ili ne znam).
Elem, ponudio se da pomognem prijatelju da formatira xml podatke koje mu shalje web server i da ih prikazhe na web strani. Stvar mora da bude client-side, jer nema pristup aplikaciji na serveru, i sve shto mozhe da dobije nazad je (ochajno formatiranu!) xml stranu.
OK, malo Ajax-a, formatiranja xml-a, i html-inject u letu je reshilo problem i to lepo radi u testu.
Medjutim, produkcijski server se nalazi na drugom subdomenu od strane koja ce otvarati konekciju ka serveru (xml dolazi sa profile.something.com a Ajax radi sa www.something.com). I naravno sada nijedan browser nece da otvori request prema strani u drugom subdomenu.
Jedino shto mi pada na pamet (a da nisu neki ruzhni iframe-bridge hakovi) je da stavi Ajax stranu na isti subdomen sa serverom, i odatle je pokupi u iframe-u.
Imate li josh neki predlog, za sluchaj da ne mozhe da pristupi fizichki subdomenu gde je server aplikacija?
TIA
jablan
15. 01. 2007., 16:45
Baci pogled na ovo:
http://developer.yahoo.com/javascript/howto-proxy.html
marinowski
15. 01. 2007., 16:50
... i ovde:
http://www.ajaxian.com/archives/how-to-make-xmlhttprequest-calls-to-another-server-in-your-domain
bNasty
15. 01. 2007., 16:52
Hvala, vidjao sam neka Proxy reshenja ranije ali nisam obracao pazhnju do sada.
Od svih ponudjenih eventualno url-rewrite bi mogao da pomogne (jer nishta od PHP-a, json-a i slichnih opcija). Ili to, ili neka kopira stranu i script u isti subdomain nekako.
cvele
15. 01. 2007., 17:02
uh nemam link ovde, pitacu kolegu sutra... ima jedna zgodna stvarcica koja funkcionise preko flasha... radi cross domain
marinowski
15. 01. 2007., 18:34
Sve cemo cesce vidjati javascript + flash resenja, s tim da korisnik nece ni znati da koristi flash. Dovoljan razlog je bolji storage engine kod flasha.
ivanhoe
15. 01. 2007., 21:28
flashu ako dodas crossdomain.xml u root site-a, onda mozes da mu obezbedis da skida podatke odakle hoces..
napises u tom fajlu nesto tipa:
<?xml version="1.0"?>
<!DOCTYPE cross-domain-policy SYSTEM "http://www.macromedia.com/xml/dtds/cross-domain-policy.dtd">
<cross-domain-policy>
<allow-access-from domain="www.nesto.com" />
</cross-domain-policy>
i to bi trebalo da radi..
bNasty
16. 01. 2007., 18:59
Hvala na odgovorima.
Od svega ponudjenog je mod_rewrite (pomenut na yahoo-u) najbrzhe reshenje.
Mozhda ovo i nije forum za to, ali pitanje za mod_rewrite znalce (jer nemam trenutno nijedan remote server na raspolaganju da isprobam):
Redirekcija mora da bude "silent", tj. 30x response nije prihvatljiv jer javascript ochekuje xml. To sve lepo radi kada se redirektuje unutar istog subdomain-a, ali kakva je situacija sa npr.
RewriteRule ^/xml_data/([./]+)$ http://profile.blabla.com/$1 [QSA,T=application/xml,L]
(ovo napamet kucam, ali to je ideja). Oba dela se nalaze na istom domenu, ali razlichiti sub domeni. Da li u tom sluchaju mora da se koristi i [P] flag, tj. mod_proxy? Nisam siguran da server uopshte ima mod_proxy ukljuchen, shto bi bio problem...
TIA
ivanhoe
16. 01. 2007., 20:30
ne moze to tako, ako zelis spoljni redirekt (sa promenom domena) moras browseru da nalozis da to uradi sa 301 (ili vec kojim) responsom uz pomoc [R] flaga. Ako ne stavis [R] onda radis unutrasnji redirect apache-u i tako ne mozes da promenis domen.
Ono sto moze da se uradi (ali ja nemam nikakvog iskustva sa tim) je da koristis apache kao proxy server (sa mod_proxy), pa da mod_rewrite-u nalozis da uradi rewrite i posalje proxy zahtev. To se radi sa [P] flagom i pretpostavljam da bi sintaxa isla ovako nekako:
RewriteRule ^/xml_data/([./]+)$ http://profile.blabla.com/$1 [P,QSA,T=application/xml,L]
EDIT: pogledaj i ProxyPass komandu za mod_proxy, ona radi nesto slicno: http://httpd.apache.org/docs/2.0/mod/mod_proxy.html#proxypass
bNasty
17. 01. 2007., 01:15
Tja.... preko preche, naokolo blizhe.... lepo je meni govorio tata, mani web i drzhi se C++a :)
Na kraju sam sredio nekako problem preko bridge-a u PHP-u :\
Da ne bude sve kako treba curl nije bio dostupan, ali sam nekako ishchupao reshenje - preko stream_context_create() funkcije.
Hvala josh jednom, poz
vBulletin® v3.6.8, Copyright ©2000-2024, Jelsoft Enterprises Ltd.