我正在创建一个html5-JavaScript应用(用于移动设备,使用PhoneGap)。我必须与REST服务进行交互。
该服务现在正在运行 "http://localhost:8080/backend/mvc/"
"http://localhost:8080/backend/mvc/"
我正在wamp服务器(apache2)(http://localhost/stage/)上开发应用程序,正在使用Chrome浏览器。
http://localhost/stage/
当执行ajax调用时,浏览器响应: XMLHttpRequest cannot load http://localhost:8080/backend/mvc/event. Origin http://localhost is not allowed by Access-Control-Allow-Origin.
XMLHttpRequest cannot load http://localhost:8080/backend/mvc/event. Origin http://localhost is not allowed by Access-Control-Allow-Origin.
因此,我找到了几种方法来解决此跨域Ajax调用问题:
1)起始chrome chrome.exe --disable-web-security =>没有区别
chrome.exe --disable-web-security
2)使用mod_proxy配置apache以重定向流量。
我在httpd.conf中启用了:
proxy_module proxy_connect_module proxy_http_module
我.htaccess在www根目录下放置了一个文件,内容如下:
.htaccess
# start mod_rewrite RewriteEngine On ProxyRequests off <Proxy> Order deny,allow Allow from all </Proxy> ProxyPass /EMBackend/ http://localhost:8080/backend/mvc/ ProxyPassReverse /EMBackend/ http://localhost:8080/backend/mvc/ RewriteRule ^/EMBackend/(.*)$ /backend/mvc/$1 [R]
我重新启动了所有服务(apache,php等)。
导致错误500
apache错误日志: [Tue Oct 18 14:30:11 2011] [alert] [client 127.0.0.1] C:/wamp/www/.htaccess: ProxyRequests not allowed here
[Tue Oct 18 14:30:11 2011] [alert] [client 127.0.0.1] C:/wamp/www/.htaccess: ProxyRequests not allowed here
关于如何解决这个问题的任何线索?
我找到了一个可行的解决方案:
启用:
LoadModule proxy_module modules/mod_proxy.so LoadModule proxy_http_module modules/mod_proxy_http.so
将其放入配置的主要部分(或所需的虚拟主机,如果使用Apache虚拟主机):
ProxyRequests Off ProxyPreserveHost On <Proxy *> Order deny,allow Allow from all </Proxy> ProxyPass /EMBackend http://localhost:8080/backend/mvc ProxyPassReverse /EMBackend http://localhost:8080/backend/mvc <Location /EMBackend> Order allow,deny Allow from all </Location>
所以我想我不能把它放进去,.htaccess否则我必须摆放它ProxyPreserveHost On。我把Include conf/extra/中httpd.conf文件和创建的httpd- proxy.conf文件,并把上面的脚本在里面。重新启动了Apache,它正在工作!
ProxyPreserveHost On
Include conf/extra/
httpd.conf
httpd- proxy.conf