ajax跨域问题解决方案以及详解

转自:https://www.imooc.com/learn/947

一、解决方案

    先把解决办法放在前面:

1.   Jsonp + 修改后台响应

a)    Jsonp:”calback2”-> super(“calback2”)

2.   被调用方  Filter( client <-> tomcat )

3.   带自定义头的请求

4.   被调用方Nginx( client <->nginx <-> tomcat )

a)    Windows/host    127.0.0.1 b.com(虚拟主机)

b)    Nginx/conf/  新建文件夹vhost ,修改nginx.conf,新增b.com.conf

 

5.   被调用方Apache

a)    修改Apache/conf/httpd.conf      vhost proxy headers rewrite


b)    修改apache/Conf/extra/httpd-ssl.conf,末尾添加

6.   Spring框架解决方案,增加注解@CrossOrigin

7.   调用方解决-隐藏跨域(反向代理)调用方nginx

a)    Windows/host    127.0.0.1 b.com a.com(调用方虚拟主机)

b)    Nginx/conf/  新建文件夹vhost ,修改nginx.conf,新增a.com.conf

8.   调用方解决-隐藏跨域(反向代理)调用方apache

二、详解

发生跨域,是由三个因素导致的:浏览器机制,xmlHttpRequest,跨域。所以解决办法从这三个入口来解决

1.   Jsonp:

a)    普通ajax请求发送的是type为xhr的包,而jsonp发送的是type=script。

b)  Jsonp原理是动态创建一个script脚本。所以只能接受GET请求

2.   Filter: (client直接与tomcat交互数据)

a)    * 不能解决带cookie的请求

3.   略

Apache/Nginx:http服务器,做反向代理/负载均衡和处理静态资源(script、img)

Tomcat:应用服务器,处理用户数据(静态服务器不是必要阶段,可以将请求直接发给应用服务器)

Json格式的ajax请求->Options预检命令,请求时先检测是否能请求到

4.   被调用方Nginx

让请求在到被调用方,先访问被调用方的http服务器,在其中对xhr请求的包头做处理

5.  被调用方Apache
6.   略
7.   调用方nginx

a)    调用的地址是本地的,所以前缀是相对地址。让浏览器不认为是跨域

现在:之前:

8.    调用方apache

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值