2009-07-16 18 views
7

Bu, yapmaya çalıştığım şeydir.İstemcinin 'localhost'una JavaScript Online'dan erişme

  1. İçinde JavaScript kodlu birkaç .html sayfa hazırladım ve bunları bir Yahoo sunucusunda barındırdım. // localhost: bazı verileri okumak için 8080/MyServlet/servlet1

  2. Şimdi belli bir tarayıcı ile bir istemci bu web sayfalarını görüntülediğinde, JavaScript kodu h1ttp bir bağlantı kurmak için XMLHTTPRequest kullanır.

  3. İstemci varsa, istemcinin bilgisayarında çalışan web sunucusuna bağlanmak istiyorum, yani xmlHTTPRequest öğesinde localhost kullanıyorum.

Ama bu bir istemci bir web sunucusu müşterinin bilgisayarında port 8080 üzerinde çalışan gelmiştir Ben http://localhost:8080/mysevlet/servlet1 erişebilir ve servlet çalışan ince, ama ne zaman bile çalışmıyor Yahoo sunucusuna o barındırılan .html sayfası aracılığıyla çalışmıyor.

Burada yanlış yaptığım bir şey var mı?

+3

çalışmıyor, çünkü yapmamalı. – SilentGhost

+0

Bu neden reddedildi? Bana geçerli bir soru gibi görünüyor. – MattC

+0

Gelecekte, lütfen daha spesifik soru başlıklarıyla gönderin. Bunu senin için düzenledim. –

cevap

2

Bu bir etki alanı sorunu değil mi?

5

İlke kısıtlamaları nedeniyle tarayıcılar, durumunuzda Yahoo olan web sitesini barındıran etki alanından farklı etki alanlarına XMLHttpRequest göndermenize izin vermez.

6

Cross-site Scripting

o XML veya JSONP

dönen bir Web Servis olmadıkça, adınızda değil ne erişemez
+2

localhost'u http: // /sample.xml olarak değiştirdiğimde, XML dosyasında Yahoo üzerinde barındırılmadığında bile doğru bir şekilde okuyabiliyorum. Bence bu bir çapraz senaryo problemi değil. – user139123

1

diğerleri yorumladı gibi, bu çünkü tarayıcı güvenlik modelinin çalışmaz.

, adresinden, ana dosya dosyanızdaki bir girdiyle karşılaşabilirsiniz.

Birincisi, uygulamanızı varsayarak bir yahoo.com etki alanında, hosts dosyasını açın ve sayfalarında, O zaman bu

127.0.0.1 mylocalhost.yahoo.com 

gibi bir girdi ekleyin http://mylocalhost.yahoo.com/myservlet/serverl1

için AJAX bitiş noktasını değiştirmek Bunu hiç denemedim, bu yüzden işe yarayacağından emin olamam, ama olabilir. o işi yaparsa, bu sayfanın her kullanıcı kendi ana

yukarıdaki Not gibi dosya değişiklik yapması gerekir: dan dosya pencerelerinde C:\WINDOWS\system32\drivers\etc\hosts bulunan ve

+1

Bunun işe yaramayacağını düşünüyorum. Ev sahibi, XMLHTTPRequest'in çalışması için tam olarak aynı olmalıdır. Http; // www.example.com adresinden yüklenen sayfalar http; // foo.example.com, http; // example.com:8080 veya https; // example.com adreslerine erişemez. Document.domain ve iframe'lerle oynayabileceğiniz bazı püf noktaları var, ancak hoş değiller. –

0

yerel * nix /etc/hosts de alınmalıdır Makine ayrıca Ajax kodunuzla yahoo sayfalarına "http://localhost:8080/whatever" haritalarını düzenleyen bir proxy'ye ihtiyaç duyar. Kodun çalışması için, tarayıcıya erişmeye çalıştığı alanı aynı alan adını kullanarak yüklemeniz gerekir.

Bunu Tomcat (?) Ile nasıl yapacağımı bilmiyorum, ancak bir seçenek hem Tomcat sunucusunu hem de Yahoo sayfalarını aynı konuma taşımak için Apache kullanmaktır.Daha sonra localhost'tan/statik adresinin HTML yük olur ve bu sayfaların/MyServlet localhost AJAX isteklerini yapmak mümkün olacaktır

LoadModule proxy_module modules/mod_proxy.so 
LoadModule proxy_http_module modules/mod_proxy_http.so 
... 
<IfModule proxy_http_module> 
    ProxyRequests off 
    ProxyPass /static http://yahoo.com/path 
    ProxyPass /myservlet http://localhost:8080/myservlet 
</IfModule> 

: gibi

Apache, bu görünüyor.

İlgili konular