繁体   English   中英

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

[英]Accessing Client's 'localhost' from JavaScript Online

这就是我想要做的。

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

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

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

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

我在这里做错了什么?

跨站脚本

除非是返回XML或JSONP的Web服务,否则您无法访问域中不存在的内容

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

这不是一个跨域问题吗?

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

可以通过hosts文件中的条目来解决这个问题。

首先,假设您的应用程序位于yahoo.com域中,请打开您的主机文件并添加如下条目

127.0.0.1 mylocalhost.yahoo.com

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

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

注意:您的hosts文件应位于C:\\WINDOWS\\system32\\drivers\\etc\\hosts中的C:\\WINDOWS\\system32\\drivers\\etc\\hosts和* nix中的/etc/hosts

本地机器还需要一个代理设置,使用您的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请求。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM