如何让服务器支持跨域
要看服务器类型,如果服务器是apache
(1)修改http服务的配置文件:C:\wamp\bin\apache\Apache244\conf\httpdconf
把LoadModule headers_module modules/mod_headersso 前面的注释删除
(2)添加Header set Access-Control-Allow-Origin
<Directory />
AllowOverride none
Require all granted
Header set Access-Control-Allow-Origin
</Directory>
(3)重启http服务
如果是tomcat,比如spring MVC项目
创建一个过滤器,代码如下:
Java代码 收藏代码
package comwebfilter;
import javaioIOException;
import javaxservletFilter;
import javaxservletFilterChain;
import javaxservletFilterConfig;
import javaxservletServletException;
import javaxservletServletRequest;
import javaxservletServletResponse;
import javaxservlethttpHttpServletResponse;
import comcommondictConstant2;
import oaserviceDictionaryParam;
public class SimpleCORSFilter implements Filter{
@Override
public void destroy() {
}
@Override
public void doFilter(ServletRequest req, ServletResponse res,
FilterChain chain) throws IOException, ServletException {
HttpServletResponse response = (HttpServletResponse) res;
responsesetHeader("Access-Control-Allow-Origin", DictionaryParamget(Constant2DICTIONARY_GROUP_GLOBAL_SETTING, "AccessControlAllowOrigin"));
responsesetHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE");
responsesetHeader("Access-Control-Max-Age", "3600");
responsesetHeader("Access-Control-Allow-Headers", "x-requested-with");
chaindoFilter(req, res);
}
@Override
public void init(FilterConfig arg0) throws ServletException {
}
}
关键代码:responsesetHeader("Access-Control-Allow-Origin", "");
<filter>
<filter-name>cors</filter-name>
<filter-class>comwebfilterSimpleCORSFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>cors</filter-name>
<url-pattern>/</url-pattern>
</filter-mapping>
这样服务器就支持ajax的跨域访问了
服务端的解决方案的基本原理就是,由客户端将请求发给本域服务器,再由本域服务器的代理来请求数据并将响应返回给客户端。
最常用的服务器解决方案就是利用web服务器本身提供的proxy功能,如apache和lighttpd的mod_proxy模块。在百度内
部,transmit的分流功能也可以解决部分跨域问题。但这些方法都有一定的局限性,鉴于安全性等问题的考虑,space这边最后开发了一个专门用于处
理跨域请求代理服务的spproxy模块,用于彻底解决js跨域问题。
下面我们将以空间的开放平台为例,简单介绍下如何通过apache的mod_proxy、transmit的分流以及space的spproxy模块来解
决该跨域问题,并简单介绍下spproxy的一些特性、缺点及下一步的改进计划。
空间在展现每个UWA开放模块之前都必须请求该模块的xml源代码以进行解析,每个模块的源代码文件都是存放在act域下的/ow/uwa目录下,那么在
用户空间首页(hi域)中请求该xml文件时就会存在js跨域问题。要解决该问题,只能让js向hi域的web服务器请求xml文件,而hi域web服务
器则通过一定的代理机制(如mod_proxy、transmit分流、spproxy)向act域的web服务器请求文件
0条评论