nginx url rewrite
在服务器端安装nginx服务,将H5前端的访问路径和java后端的访问路径放在一个域名下,由nginx根据url请求路径进行转发:
http://aaa.afubx.com/afbx-wap ==》 afbx-wap
http://aaa.afubx.com/afbx-rest ==> afbx-rest
Nginx配置:
server {
listen 80;
server_name aaa.afubx.com;
index index.html index.htm;
location /afbx-rest {
#proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://192.168.0.202:18081;
}
location /afbx-wap/afbx-wap {
index index.php index.html index.htm;
rewrite "/afbx-wap/(.*)" /$1;
}
location /afbx-wap {
#proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://192.168.0.202:18083;
}
}
优点:通过同一域访问,不存在跨域问题。
缺点:需要安装配置nginx,并且存在nginx单点压力的隐患。
跨域资源共享CROS
服务端根据http请求头的Origin字段进行判断,设置允许访问的域名访问。
解决方法:
服务端拦截请求,通过HttpServletRequest.getHeader(“Origin”)进行判断,如果是白名单就设置HttpServletResponse.setHeader(“Access-Control-Allow-Origin”,”{来源域名}”);
Java代码:
List whiteList = new ArrayList();
whiteList.add(“”);
String filterDrive = “wap”;
HttpServletResponse res = (HttpServletResponse) message.get(AbstractHTTPDestination.HTTP_RESPONSE);
HttpServletRequest req = (HttpServletRequest) message.get(AbstractHTTPDestination.HTTP_REQUEST);
If(filterDrive.equas(req.getParameter(“drive”))){
String origin = req.getHeader("Origin");
If(whiteList.contains(origin)){
res.setHeader("Access-Control-Allow-Origin", origin);
}
}
优点:使用ajax直接跨域访问,服务端添加支持,对以前的代码无影响。
缺点: