ajax请求前端跨域问题原因及解决方案


Posted in Javascript onOctober 16, 2021

一、跨域是怎么形成的

当我们请求一个url的 协议、域名、端口三者之间任意一个与当前页面url的协议、域名、端口 不同这种现象我们把它称之为跨域

跨域会导致:
1、无法读取非同源网页的 Cookie、LocalStorage 和 IndexedDB
2、无法接触非同源网页的 DOM
3、无法向非同源地址发送 AJAX 请求(可以发送,但浏览器会拒绝接受响应)

二、导致跨域的根本原因

导致跨域的根本原因是请求浏览器的同源策略导致的 ,而跨域请求报错的原因是: 浏览器同源策略 && 请求是ajax类型 && 请求确实跨域了

三、解决方法

给大家介绍三种方法 jsonp,cors,代理转发

1 、JSONP

JSONP 是服务器与客户端跨源通信的常用方法。最大特点就是简单适用,兼容性好(兼容低版本IE),缺点是只支持get请求,不支持post请求。
原理:img、srcipt,link标签的src或href属性不受同源策略限制,可以用来作为请求,后端接受请求后返回一个回调函数callback,调用前端已经定义好的函数,从而实现跨域请求。

举个很简单的例子 : 我们通过img标签的src属性, 请求一个网络地址的图片 ,这就是非同源请求了 ,但是由于浏览器的同源策略只对ajax请求有效所以 我们的请求不会受到影响 。换句话来说 只有ajax请求才会产生跨域问题。

2、 CORS

CORS 是跨域资源分享(Cross-Origin Resource Sharing)的缩写。它是 W3C 标准,属于跨源 AJAX 请求的根本解决方法。

CORS允许任何类型的请求。在使用CORS来访问数据的时候,客户端不需要更改任何数据访问逻辑。所有的一切工作都是在服务端及浏览器之间自动完成的。前端代码与发送普通Ajax请求没有差异,我们只需在服务端设置即可(后端的活)

3 、代理转发

ajax请求前端跨域问题原因及解决方案

在前端服务和后端接口服务之间 架设一个中间代理服务,它的地址保持和前端服务器一致,那么:
这样,我们就可以通过中间这台服务器做接口转发,在开发环境下解决跨域问题,看起来好像挺复杂,其实vue-cli已经为我们内置了该技术,我们只需要按照要求配置一下即可。

vue.config.js 的devServer(开发环境)里 配置代理服务器 通过这个代理服务器发送请求 这样就不纯在跨域的问题了 代码如下:

module.exports = {
  devServer: {
    // ... 省略
    // 代理配置
    proxy: {
        // 如果请求地址以/api打头,就出触发代理机制
        // http://localhost:9588/api/login -> http://localhost:3000/api/login
        '/api': {
          target: 'http://localhost:3000' // 我们要代理的真实接口地址
        }
      }
    }
  }
}

记得baseURL里的根路径 是相对地址,而不能是绝对地址

以上就是ajax请求前端跨域问题原因及解决方案的详细内容,更多关于ajax跨域问题原因及解决的资料请关注三水点靠木其它相关文章!

Javascript 相关文章推荐
js调用flash的效果代码
Apr 26 Javascript
js面向对象 多种创建对象方法小结
May 21 Javascript
js读取注册表的键值示例
Sep 25 Javascript
JavaScript实现算术平方根算法-代码超简单
Sep 11 Javascript
js canvas仿支付宝芝麻信用分仪表盘
Nov 16 Javascript
详解Angular的数据显示优化处理
Dec 26 Javascript
JS数组返回去重后数据的方法解析
Jan 03 Javascript
详解vue前后台数据交互vue-resource文档
Jul 19 Javascript
AngularJS中的路由使用及实现代码
Oct 09 Javascript
vue中如何创建多个ueditor实例教程
Nov 14 Javascript
JS中如何轻松遍历对象属性的方式总结
Aug 06 Javascript
Javascript类型判断相关例题及解析
Aug 26 Javascript
浅谈TypeScript 索引签名的理解
JavaScript 反射学习技巧
Oct 16 #Javascript
JS的深浅复制详细
Oct 16 #Javascript
JS 基本概念详细介绍
Oct 16 #Javascript
AJAX实现指定部分页面刷新效果
AJAX实现省市县三级联动效果
Oct 16 #Javascript
简单聊聊Vue中的计算属性和属性侦听
Oct 05 #Vue.js
You might like
IIS环境下快速安装、配置和调试PHP5.2.0
2006/12/17 PHP
php中文字符截取防乱码
2008/03/28 PHP
注意:php5.4删除了session_unregister函数
2013/08/05 PHP
一段利用WSH获取登录时间的jscript代码
2008/05/11 Javascript
番茄的表单验证类代码修改版
2008/07/18 Javascript
分享一个自定义的console类 让你不再纠结JS中的调试代码的兼容
2012/04/20 Javascript
javascript 快速排序函数代码
2012/05/30 Javascript
JavaScript window.document的属性、方法和事件小结
2012/10/24 Javascript
jquery实现省市select下拉框的替换(示例代码)
2014/02/22 Javascript
教你用jquery实现iframe自适应高度
2014/06/11 Javascript
Javascript学习笔记之数组的构造函数
2014/11/23 Javascript
JS实现在网页中弹出一个输入框的方法
2015/03/03 Javascript
JavaScript文档碎片操作实例分析
2015/12/12 Javascript
jQuery实现的多张图无缝滚动效果【测试可用】
2016/09/12 Javascript
JavaScript仿网易选项卡制作代码
2016/10/06 Javascript
关于iframe跨域POST提交的方法示例
2017/01/15 Javascript
node.js通过axios实现网络请求的方法
2018/03/05 Javascript
vue中各选项及钩子函数执行顺序详解
2018/08/25 Javascript
彻底弄懂 JavaScript 执行机制
2018/10/23 Javascript
jQuery实现表格的增、删、改操作示例
2019/01/27 jQuery
javascript数据类型中的一些小知识点(推荐)
2019/04/18 Javascript
Node.js Windows Binary二进制文件安装方法
2019/05/16 Javascript
vue项目启动出现cannot GET /服务错误的解决方法
2020/04/26 Javascript
[03:46]DOTA2英雄基础教程 维萨吉
2013/12/11 DOTA
[55:44]完美世界DOTA2联赛决赛 FTD vs Phoenix 第二场 11.08
2020/11/11 DOTA
超简单使用Python换脸实例
2019/03/27 Python
Python 实现输入任意多个数,并计算其平均值的例子
2019/07/16 Python
Pandas实现DataFrame按行求百分数(比例数)
2019/12/27 Python
Python基于数列实现购物车程序过程详解
2020/06/09 Python
Python 实现微信自动回复的方法
2020/09/11 Python
python使用matplotlib:subplot绘制多个子图的示例
2020/09/24 Python
机械系大学毕业生推荐信
2013/11/27 职场文书
2015年社区妇联工作总结
2015/04/21 职场文书
Redis缓存-序列化对象存储乱码问题的解决
2021/06/21 Redis
mysql事务对效率的影响分析总结
2021/10/24 MySQL
PHP遍历数组的6种方式总结
2021/11/17 PHP