前端跨域问题及解决方案

同源策略

  • window.origin或location.origin可以得到当源
  • 源=协议 + 域名 + 端口号

如果有两个url的

  • 协议
  • 域名
  • 端口号
  • 完全一致,那么这两个url就是同源的

完全一致才算同源

同源策略定义

浏览器规定

  • 如果JS运行在源A里,那么就只能获取源A的数据
  • 不能获取源B的数据,即不允许跨域

浏览器的目的是保护隐私
黑客发送的页面里的JS请求几乎没有区别,(referer有区别)

简单定义:不同源的页面之间,不准相互访问数据

为什么可以跨域使用CSS、JS和图片等?

答:同源策略限制的是数据访问,我们引用CSS、JS和图片的时候,其实并不知道其内容,我们只是在引用。

解法一:CORS

在AJAX中添加响应头Access-Control-Allow-Origin

解法二:JSONP

步骤

  • A.com将数据写到A.json
  • B.com用script标签引用/A.js
  • A.js执行A.com事先定义好的window.xxx函数
  • 通过window.xxx回调函数

JSONP是什么

答:在跨域的时候,有些浏览器不支持CORS,必须使用另外一种方式来跨域。于是请求一个JS文件,JS文件会执行一个回调,回调中有需要的数据。回调的名字可以随机生成,把这个名字以callback的参数传给后台,后台会把这个参数再返回给我们执行。

JSONP主要就是利用了script标签没有跨域限制的这个特性来完成的。
后端通过执行回调函数,以参数的形式将数据返回给前端。

优点:

  • 兼容IE
  • 可以跨域

缺点

  • 由于是script标签,读不到AJAX那么精确的数据,不知道状态码等信息,只知道成功和失败
  • 只能发GET请求,不支持POST
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值