2009-07-16 15 views
7

esto es lo que trato de hacer.Accediendo al 'localhost' del Cliente desde JavaScript Online

  1. He creado algunas páginas .html con código JavaScript y las he alojado en un servidor de Yahoo.

  2. Ahora, cuando un cliente con un determinado navegador ve estas páginas web, el código JavaScript utiliza XMLHTTPRequest para realizar una conexión a h1ttp: // localhost: 8080/myservlet/servlet1 de leer algunos datos.

  3. Lo sé, quiero conectarme al servidor web que se ejecuta en la computadora del cliente si el cliente tiene uno, es decir, estoy usando localhost en mi xmlHTTPRequest.

Pero esto no está funcionando incluso cuando un cliente tiene un servidor web que se ejecuta en el puerto 8080. En el ordenador del cliente que puede acceder http://localhost:8080/mysevlet/servlet1 y el servlet está funcionando muy bien, pero a través de la página .html alojado en el servidor Yahoo se No funciona.

¿Algo que estoy haciendo mal aquí?

+3

no funciona, porque no debería. – SilentGhost

+0

¿Por qué se ha votado negativamente? Me parece una pregunta válida. – MattC

+0

En el futuro, publique con más títulos de preguntas específicas. He editado este para ti. –

Respuesta

2

¿No es esto un problema entre dominios?

5

Debido a restricciones de política, los navegadores no le permiten enviar XMLHttpRequest a dominios diferentes al dominio que aloja la página web que en su caso es Yahoo.

6

Cross-site Scripting

No se puede acceder a lo que no está en su dominio, a menos que sea un servicio Web regresar XML o JSONP

+2

Cuando cambio el servidor local a http: // /sample.xml, puedo leer correctamente el archivo XML incluso cuando no está alojado en Yahoo. Entonces creo que no es un problema de script cruzado. – user139123

1

Como han comentado otros, esto no funciona debido al modelo de seguridad del navegador.

Usted podría ser capaz de evitar esto con una entrada en su archivo de hosts.

En primer lugar, suponiendo que su aplicación está en un dominio yahoo.com, abrir su archivo de hosts y añadir una entrada como esta

127.0.0.1 mylocalhost.yahoo.com 

Luego, en sus páginas, cambiar su punto final AJAX para http://mylocalhost.yahoo.com/myservlet/serverl1

Nunca lo he probado, así que no puedo estar seguro de que funcione, pero podría ser. Si funciona, todos los usuarios de esta página tendrá que modificar el archivo de sus anfitriones como el anterior

Nota: su archivo de hosts debe estar situado en C:\WINDOWS\system32\drivers\etc\hosts en las ventanas, y al /etc/hosts en * nix

+1

No creo que eso funcione. El host debe ser exactamente igual para que XMLHTTPRequest funcione. Las páginas cargadas desde http; // www.example.com no pueden acceder a http; // foo.example.com, http; // example.com:8080 o https; // example.com. Hay algunos trucos que puedes jugar con document.domain y iframes, pero no son bonitos. –

0

Lo local la máquina también necesita una configuración de proxy que asigne "http://localhost:8080/whatever" a las páginas de yahoo con su código Ajax. Para que el código funcione, debe cargarlo en el navegador utilizando el dominio del mismo dominio al que intenta acceder.

No estoy seguro de cómo hacer esto con Tomcat (?), Pero una opción es usar Apache para proxy tanto del servidor Tomcat como de las páginas de Yahoo en la misma ubicación.

En Apache, esto se parece a:

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> 

A continuación, cargar el código HTML de localhost/estática, y esas páginas sería capaz de hacer peticiones AJAX a localhost/myservlet.

Cuestiones relacionadas