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 相关文章推荐
javascript IFrame 强制刷新代码
Jul 23 Javascript
jQuery实现的立体文字渐变效果
May 17 Javascript
js如何改变文章的字体大小
Jan 08 Javascript
js原生跨域_用script标签的简单实现
Sep 24 Javascript
Bootstrap栅格系统学习笔记
Nov 25 Javascript
各种选择框jQuery的选中方法(实例讲解)
Jun 27 jQuery
vue-router 组件复用问题详解
Jan 22 Javascript
jQuery插件实现非常实用的tab栏切换功能【案例】
Feb 18 jQuery
Layui带搜索的下拉框的使用以及动态数据绑定方法
Sep 28 Javascript
vue实现权限控制路由(vue-router 动态添加路由)
Nov 04 Javascript
小程序实现筛子抽奖
May 26 Javascript
基于JavaScript实现省市联动效果
Jun 22 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
Discuz板块横排显示图片的实现方法
2007/05/28 PHP
php对图像的各种处理函数代码小结
2013/07/08 PHP
php发送post请求函数分享
2014/03/06 PHP
php遍历数组的4种方法总结
2014/07/05 PHP
dedecms集成财付通支付接口
2014/12/28 PHP
PHP生成json和xml类型接口数据格式
2015/05/17 PHP
CI框架支持$_GET的两种实现方法
2016/05/18 PHP
PHP基于curl实现模拟微信浏览器打开微信链接的方法示例
2019/02/15 PHP
extJs 文本框后面加上说明文字+下拉列表选中值后触发事件
2009/11/27 Javascript
使用jQuery的将桌面应用程序引入浏览器
2010/11/19 Javascript
JQuery中使用Ajax赋值给全局变量异常的解决方法
2014/01/10 Javascript
JavaScript实现下拉菜单的显示和隐藏
2016/01/05 Javascript
限制只能输入数字的实现代码
2016/05/16 Javascript
jQuery中ScrollTo用法示例
2016/09/04 Javascript
详解nodejs中exports和module.exports的区别
2017/02/17 NodeJs
聊聊JavaScript如何实现继承及特点
2017/04/07 Javascript
使用Require.js封装原生js轮播图的实现代码
2017/06/15 Javascript
Angularjs 1.3 中的$parse实例代码
2017/09/14 Javascript
微信小程序自定义toast组件的方法详解【含动画】
2019/05/11 Javascript
Vue+abp微信扫码登录的实现代码示例
2020/01/06 Javascript
原生js实现下拉框选择组件
2021/01/20 Javascript
[01:07:19]DOTA2-DPC中国联赛 正赛 CDEC vs XG BO3 第一场 1月19日
2021/03/11 DOTA
Python 的描述符 descriptor详解
2016/02/27 Python
Django admin实现图书管理系统菜鸟级教程完整实例
2017/12/12 Python
django文档学习之applications使用详解
2018/01/29 Python
Python subprocess库的使用详解
2018/10/26 Python
Python 多个图同时在不同窗口显示的实现方法
2019/07/07 Python
Python使用多进程运行含有任意个参数的函数
2020/05/02 Python
详解Python 中的 defaultdict 数据类型
2021/02/22 Python
汽修专业自荐信
2014/07/07 职场文书
民族学专业大学生职业规划范文:清晰未来的构想
2014/09/20 职场文书
我的中国梦心得体会范文
2016/01/05 职场文书
党员公开承诺书(2016最新版)
2016/03/24 职场文书
python爬取某网站原图作为壁纸
2021/06/02 Python
python和C/C++混合编程之使用ctypes调用 C/C++的dll
2022/04/29 Python
MySQL 原理优化之Group By的优化技巧
2022/08/14 MySQL