web开发中的跨域问题

一.为什么会有跨域问题?

1.浏览器限制

2.跨域

域名,端口,协议任意一个不相同;

3.XHR(XMLHttpRequest)请求

 

满足以上三个条件才会触发跨域,任意一个不满足就不算是跨域;

二.解决跨域问题的方法

针对上边三中种方式,让其不满足上边的条件即可;

1.浏览器解除安全设置,这种方式需要修改客户端的浏览器,另外此种方式也不安全,不方便也不建议这样设置;

2.将后端服务使用相同的域名,端口,协议;将后端的服务暴露在相同的域名,端口,协议下就能解决该问题;

此处有两种方式进行解决,这里涉及到后端服务器的调用流程:

方法1:web server返回特定的http header,告诉浏览器,允许该域名访问;

                     Access-Control-Allow-Methods:对应的方法,如(GET),*允许所有

                     Access-Control-Allow-Origin:对应的协议,域名,端口,如(http://www.wentjiang.com),*允许所有,但是不能使用cookie,使用cookie时,需要写对应的origin

                     Spring应用直接使用@origincors

方法2:在nginx或者apache对后端服务做映射(反向代理),让浏览器直接通过不跨域的域名直接进行访问;

 

3.页面不使用XHR请求;

使用jsonp请求,jsonp是一种非官方的协议,大家约定俗成的调用方式,因为页面可以加载不同源的js代码,所以jsonp就将普通的请求后端的请求改造成请求js的请求,请求服务器的结果为原本请求接口的数据;但这种方式不建议去使用;

jsonp有以下几个弊端,1.服务器需要支持jsonp,需要添加添加callback函数名及修改固定的格式,2.只支持get请求,不能使用其他请求去调用,3.发出的不是XHR请求;

三.跨域问题的常见形式

跨域分为简单跨域和复杂跨域,

简单跨域会直接请求服务器端,并根据服务端返回的头文件进行判断;

复杂跨域浏览器会先向服务器端发出options请求,判断服务器端是否允许跨域,允许之后才进行正常的请求操作;

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值