跨域的处理

同源策略:

要求域名、协议、端口相同

JSONP

是一种跨域请求方式,

Nginx

Nginx 是一款轻量级的 HTTP 服务器,采用事件驱动的异步非阻塞处理方式框架,这让其具有良好的 IO 性能,时常用于服务端的反向代理和负载均衡。

跨域

跨域是由于浏览器的同源策略限制了不同域直接的 ajax 请求,而同源策略是浏览器最基础的安全功能,同源策略的限制主要有三个方面,ajax 不能跨域读取,dom 不能跨域操作,Cookie、 LocalStorage、 IndexDB 无法读取

针对于 cookie

Cookie 是服务器写入浏览器的一小段信息,只有同源的网页才能共享,但是两个网页一级域名相同,只是二级域名不同,浏览器允许通过设置 documen.domain 共享 cookie

针对于 ajax

端口、 协议、 域名 三者其中一个不相同,那么就无法跨域请求

解决 ajax 的跨域我们可以从同源策略的限制上入手
1.Ajax 无法跨域请求,而请求只是限制了 ajax,并没有限制其他的请求
2.同源策略是浏览器的限制

利用其他资源可以解决跨域,常见的方案就是 jsonp, jsonp 就是利用js 请求模拟 ajax 请求,从而突破同源策略的限制,但是需要后端配合返回值为 js 的语法,常见的就是后端返回一个 js 函数,并且将数据作为参数传递,而返回的函数名称是前端通过 callback 字段传递到后端的,但是 jsonp 也有自己的问题,无法判断接口状态码,无法进行 post 请求,其原理就是动态生成一个 js 函数,动态生成 script 标签并且设置 src 属性为请求的接口地址,将函数名称作为参数发送到后端,后端返回函数,当 js 加载成功自动执行,在函数内部我们做参数的解析。

同源策略只是浏览器的限制,我们可以利用服务器添加代理来突破同源策略的限制,常见的代理添加方式是 webpack-dev-server 里可以添加 proxy 添加正向代理设置,解决我们开发环境中遇到的跨域问题,如果正式环境依然存在跨域问题我们可以利用 nginx 添加反向代理设置。

再就是 w3c 新增了跨域资源共享的方法,允许后端通过Access-Control-Allow-Origin 设置允许请求的域名,前端不需要做任何修改,cros 方式一般常用于小程序项目开发时接口的设置,因为小程序是运行在客户手机上的,本身不存在跨域问题,并且无法添加代理,也不能使用 jsonp,只能使用 cros 的方式

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值