这就是我想要做的。
我在其中制作了一些包含JavaScript代码的.html页面,并将它们托管在Yahoo服务器上。
现在,当某个浏览器的客户端查看这些网页时,JavaScript代码使用XMLHTTPRequest
在h1ttp:// localhost:8080 / myservlet / servlet1上建立连接以读取某些数据。< / p>
我知道,我想连接到客户端计算机上运行的Web服务器,如果客户端有一个,即我在xmlHTTPRequest中使用localhost。
但即使客户端在端口8080上运行Web服务器,这也不起作用。在客户端的计算机上,我可以访问http://localhost:8080/mysevlet/servlet1
并且servlet运行正常,但是通过托管的.html
页面在雅虎服务器上它不起作用。
我在这里做错了什么?
答案 0 :(得分:6)
您无法访问域中没有的内容,除非它是返回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请求。