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模板实现方法
Apr 27 Javascript
在IE上直接编辑网页内容的js代码(IE地址栏js)
Apr 27 Javascript
jquery使用淘宝接口跨域查询手机号码归属地实例
Nov 28 Javascript
Js查找字符串中出现次数最多的字符及个数实例解析
Sep 05 Javascript
解决AjaxFileupload 上传时会出现连接重置的问题
Jul 07 Javascript
JS+canvas动态绘制饼图的方法示例
Sep 12 Javascript
js构造函数创建对象是否加new问题
Jan 22 Javascript
layui数据表格实现重载数据表格功能(搜索功能)
Jul 27 Javascript
微信小程序使用 vant Dialog组件的正确方式
Feb 21 Javascript
vue组件实现移动端九宫格转盘抽奖
Oct 16 Javascript
ES6的循环与可迭代对象示例详解
Jan 31 Javascript
Vue项目打包、合并及压缩优化网页响应速度
Jul 07 Vue.js
浅谈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
PHP实现恶意DDOS攻击避免带宽占用问题方法
2015/05/27 PHP
PHP使用PDO实现mysql防注入功能详解
2019/12/20 PHP
JQuery 拾色器插件发布-jquery.icolor.js
2010/10/20 Javascript
jQuery中innerHeight()方法用法实例
2015/01/19 Javascript
JS实现适合于后台使用的动画折叠菜单效果
2015/09/21 Javascript
JavaScript实现相册弹窗功能(zepto.js)
2016/06/21 Javascript
微信小程序-横向滑动scroll-view隐藏滚动条
2017/04/20 Javascript
JavaScript中数组常见操作技巧
2017/09/01 Javascript
解决vue 打包发布去#和页面空白的问题
2018/09/04 Javascript
微信小程序 JS动态修改样式的实现方法
2018/12/16 Javascript
JS前端知识点 运算符优先级,URL编码与解码,String,Math,arguments操作整理总结
2019/06/27 Javascript
详解利用nodejs对本地json文件进行增删改查
2019/09/20 NodeJs
jquery 回调操作实例分析【回调成功与回调失败的情况】
2019/09/27 jQuery
微信小程序实现音乐播放器
2019/11/20 Javascript
.netcore+vue 实现压缩文件下载功能
2020/09/24 Javascript
Python监控主机是否存活并以邮件报警
2015/09/22 Python
Python实现爬虫从网络上下载文档的实例代码
2018/06/13 Python
简单了解python字符串前面加r,u的含义
2019/12/26 Python
python函数enumerate,operator和Counter使用技巧实例小结
2020/02/22 Python
PyChon中关于Jekins的详细安装(推荐)
2020/12/28 Python
Sofft鞋官网:世界知名鞋类品牌
2017/03/28 全球购物
汽车制造与装配专业自荐信范文
2014/01/02 职场文书
优秀共产党员先进事迹
2014/01/27 职场文书
医药类个人求职的自我评价
2014/02/12 职场文书
我爱我家教学反思
2014/05/01 职场文书
白血病募捐倡议书
2014/05/14 职场文书
优秀求职信
2014/05/29 职场文书
建筑安全责任书范本
2014/07/24 职场文书
初中毕业典礼演讲稿
2014/09/09 职场文书
开展党的群众路线教育实践活动工作总结
2014/11/05 职场文书
2014年接待工作总结
2014/11/26 职场文书
文员岗位职责
2015/02/04 职场文书
2015年学校政教处工作总结
2015/05/26 职场文书
2019让人心动的商业计划书
2019/06/27 职场文书
高一作文之乐趣
2019/11/21 职场文书
redis实现排行榜功能
2021/05/24 Redis