从JavaScript Online访问客户端的“localhost”

时间:2009-07-16 15:46:24

标签: javascript xmlhttprequest

这就是我想要做的。

  1. 我在其中制作了一些包含JavaScript代码的.html页面,并将它们托管在Yahoo服务器上。

  2. 现在,当某个浏览器的客户端查看这些网页时,JavaScript代码使用XMLHTTPRequest在h1ttp:// localhost:8080 / myservlet / servlet1上建立连接以读取某些数据。< / p>

  3. 我知道,我想连接到客户端计算机上运行的Web服务器,如果客户端有一个,即我在xmlHTTPRequest中使用localhost。

  4. 但即使客户端在端口8080上运行Web服务器,这也不起作用。在客户端的计算机上,我可以访问http://localhost:8080/mysevlet/servlet1并且servlet运行正常,但是通过托管的.html页面在雅虎服务器上它不起作用。

    我在这里做错了什么?

5 个答案:

答案 0 :(得分:6)

Cross-site Scripting

您无法访问域中没有的内容,除非它是返回XML或JSONP的Web服务

答案 1 :(得分:5)

由于政策限制,浏览器不允许您将XMLHttpRequest发送到与托管网页的域不同的域,在您的情况下是雅虎。

答案 2 :(得分:2)

这不是跨域问题吗?

答案 3 :(得分:1)

正如其他人所评论的那样,由于浏览器安全模型,这不起作用。

可能能够通过主机文件中的条目解决此问题。

首先,假设您的应用位于yahoo.com域,请打开您的主机文件并添加此类条目

127.0.0.1 mylocalhost.yahoo.com

然后,在您的页面中,将您的AJAX端点更改为http://mylocalhost.yahoo.com/myservlet/serverl1

我从未测试过这个,所以我不能确定它会起作用,但它可能会。如果确实有效,则此页面的每个用户都需要像上面那样修改其主机文件

注意:您的主机文件应位于Windows中的C:\WINDOWS\system32\drivers\etc\hosts,以及位于* nix中的/etc/hosts

答案 4 :(得分:0)

本地计算机还需要一个代理设置,使用您的Ajax代码将“http://localhost:8080/whatever”映射到yahoo页面。为了使代码有效,您必须使用它尝试访问的域相同域在浏览器中加载它。

我不确定如何使用Tomcat(?),但一种选择是使用Apache将Tomcat服务器和Yahoo页面代理到同一位置。

在Apache中,这看起来像:

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>

然后,您将从localhost / static加载HTML,这些页面将能够向localhost / myservlet发出AJAX请求。