需要开发一个同时高度依赖 API 但又不能与 API 本身驻留在同一域中的 Web 应用程序,在发出异步 HTTP 请求时绕过“同源策略”非常棘手(阿贾克斯)。有一次,有人建议我在我的计算机(运行 Windows 7)上安装 WAMP,并使用 Apache 配置反向代理。同一个人在告诉我为名为dev的 IP 127.0.0.1在文件中(我做了)httpd.conf
创建别名之后,给了我添加到文件中的 Apache 指令:c:\windows\system32\drivers\etc\hosts
LoadModule headers_module modules/mod_headers.so
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_connect_module modules/mod_proxy_connect.so
LoadModule proxy_http_module modules/mod_proxy_http.so
LoadModule ssl_module modules/mod_ssl.so
Listen 127.0.0.1:8080
ProxyRequests off
<Proxy *>
Order deny,allow
Deny from all
Allow from 127.0.0.1
</Proxy>
<VirtualHost dev:8080>
ProxyPass / https://app.somesite.com:5002/
ProxyPassReverse / https://app.somesitecom:5002/
ProxyPassReverseCookieDomain app.somesite.com dev
Header edit Location ^https://dev(:8080)?(.+)$ http://dev$1$2
Header edit Set-Cookie "(^.+); secure; HttpOnly$" "$1; HttpOnly"
SSLProxyEngine on
SSLProxyVerify none
</VirtualHost>
由于在配置服务器方面我是一个完全的新手,我只是粘贴了指令,幸运的是,代理工作。当我使用浏览器的地址栏访问时,它会从 API 返回正确的响应,例如http://dev:8080/a/w/currencies
.
不幸的是,对同一 URL 的 AJAX 请求(代码如下)使 Chrome 给我XMLHttpRequest cannot load http://dev:8080/a/w/currencies. Origin http://dev is not allowed by Access-Control-Allow-Origin.
错误。
$.ajax({
url: "http://dev:8080/a/w/currencies",
type: "GET",
dataType: "json",
data: {
},
success: function(data){
console.log(data);
}
});
那么,为了让这个代理与 AJAX 一起工作,还必须做些什么呢?我被告知了一些关于alias
指令的内容,但不够具体和清晰,所以对于我缺乏经验的大脑来说没有多大意义。
PS:另外,有人告诉我“问题是您从 dev:80 和 ajaxing 获取文件到 dev:8080 ”。鉴于我缺乏经验,这都没有多大意义。