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 相关文章推荐
jQuery 性能优化指南 (1)
May 21 Javascript
window.onresize 多次触发的解决方法
Nov 08 Javascript
javascript获取web应用根目录的方法
Feb 12 Javascript
我用的一些Node.js开发工具、开发包、框架等总结
Sep 25 Javascript
JavaScript动态修改背景颜色的方法
Apr 16 Javascript
JavaScript操作HTML元素和样式的方法详解
Oct 21 Javascript
jQuery+ajax+asp.net获取Json值的方法
Jun 08 Javascript
JS阻止事件冒泡行为和闭包的方法
Jun 16 Javascript
Angular将填入表单的数据渲染到表格的方法
Sep 22 Javascript
微信小程序开发之好友列表字母列表跳转对应位置
Sep 26 Javascript
vue和webpack打包项目相对路径修改的方法
Jun 15 Javascript
highcharts.js数据绑定方式代码实例
Nov 13 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
PHP开发中的错误收集,不定期更新。
2011/02/03 PHP
PHP中模拟处理HTTP PUT请求的例子
2014/07/22 PHP
php修改文件上传限制方法汇总
2015/04/07 PHP
弹出模态框modal的实现方法及实例
2017/09/19 PHP
在你的网页中嵌入外部网页的方法
2007/04/02 Javascript
javascript 学习笔记(一)DOM基本操作
2011/04/08 Javascript
用nodejs访问ActiveX对象,以操作Access数据库为例。
2011/12/15 NodeJs
纯JS实现五子棋游戏兼容各浏览器(附源码)
2013/04/24 Javascript
JS实现在页面随时自定义背景颜色的方法
2015/02/27 Javascript
根据user-agent判断蜘蛛代码黑帽跳转代码(js版与php版本)
2015/09/14 Javascript
Bootstrap每天必学之栅格系统(布局)
2015/11/25 Javascript
AngularJS模块学习之Anchor Scroll
2016/01/19 Javascript
jQuery实现放大镜效果实例代码
2016/03/17 Javascript
浅谈JS中的常用选择器及属性、方法的调用
2017/07/28 Javascript
关于定制FileField中的上传文件名称问题
2017/08/22 Javascript
vue中使用 pako.js 解密 gzip加密字符串的方法
2019/06/10 Javascript
解决Vue项目打包后打开index.html页面显示空白以及图片路径错误的问题
2019/10/25 Javascript
微信小程序开发(三):返回上一级页面并刷新操作示例【页面栈】
2020/06/01 Javascript
js实现贪吃蛇游戏 canvas绘制地图
2020/09/09 Javascript
[01:09:16]DOTA2-DPC中国联赛 正赛 SAG vs Dynasty BO3 第一场 1月25日
2021/03/11 DOTA
深入解析Python中的上下文管理器
2016/06/28 Python
matplotlib在python上绘制3D散点图实例详解
2017/12/09 Python
kaggle+mnist实现手写字体识别
2018/07/26 Python
Python控制Firefox方法总结
2019/06/03 Python
解决python 找不到module的问题
2020/02/12 Python
python怎么判断素数
2020/07/01 Python
Flask缓存静态文件的具体方法
2020/08/02 Python
学习Python爬虫的几点建议
2020/08/05 Python
让IE支持HTML5的方法
2012/12/11 HTML / CSS
Smashbox官网:美国知名彩妆品牌
2017/01/05 全球购物
新西兰第一的行李箱网站:luggage.co.nz
2019/07/22 全球购物
感恩主题班会教案
2015/08/12 职场文书
2016年第104个国际护士节活动总结
2016/04/06 职场文书
【js设计模式】SOLID五大设计原则
2022/03/24 Javascript
sql server偶发出现死锁的解决方法
2022/04/10 SQL Server
Java设计模式中的命令模式
2022/04/28 Java/Android