[英]Accessing Bloomberg API from client's browser in javascript
[英]Accessing Client's 'localhost' from JavaScript Online
这就是我想要做的。
我在其中制作了一些包含JavaScript代码的.html页面,并将它们托管在Yahoo服务器上。
现在,当某个浏览器的客户端查看这些网页时,JavaScript代码使用XMLHTTPRequest
在h1ttp:// localhost:8080 / myservlet / servlet1上建立连接以读取一些数据。
我知道,我想连接到客户端计算机上运行的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.