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进行拖拽
Jul 20 Javascript
javascript 获取图片颜色
Apr 05 Javascript
判断一个变量是数组Array类型的方法
Sep 16 Javascript
JavaScript中使用typeof运算符需要注意的几个坑
Nov 08 Javascript
javascript 面向对象封装与继承
Nov 27 Javascript
Node.js用readline模块实现输入输出
Dec 16 Javascript
jQuery插件FusionWidgets实现的Bulb图效果示例【附demo源码下载】
Mar 23 jQuery
jQuery插件FusionWidgets实现的AngularGauge图效果示例【附demo源码】
Mar 23 jQuery
Express使用html模板的详细代码
Sep 18 Javascript
JavaScript实现省市区三级联动
Feb 13 Javascript
vue+echarts+datav大屏数据展示及实现中国地图省市县下钻功能
Nov 16 Javascript
JavaScript中展开运算符及应用的实例代码
Jan 14 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
老照片 - 几十年前的收音机与人
2021/03/02 无线电
PHP入门教程之自定义函数用法详解(创建,调用,变量,参数,返回值等)
2016/09/11 PHP
RGB颜色值转HTML十六进制(HEX)代码的JS函数
2009/04/25 Javascript
jQuery实现form表单reset按钮重置清空表单功能
2012/12/18 Javascript
jquery实现图片渐变切换兼容ie6/Chrome/Firefox
2013/08/02 Javascript
JS解析XML实例分析
2015/01/30 Javascript
jQuery验证插件validation使用指南
2015/04/21 Javascript
详解JavaScript中的every()方法
2015/06/08 Javascript
jQuery实时显示鼠标指针位置和键盘ASCII码
2016/03/28 Javascript
JQuery插件Marquee.js实现无缝滚动效果
2016/04/26 Javascript
js拼接html字符串的注意事项
2016/10/13 Javascript
javascript 单例模式详解及简单实例
2017/02/14 Javascript
Bootstrap表单使用方法详解
2017/02/17 Javascript
JavaScript基础之this详解
2017/06/04 Javascript
使用Require.js封装原生js轮播图的实现代码
2017/06/15 Javascript
JS实现的全排列组合算法示例
2017/10/09 Javascript
Postman模拟发送带token的请求方法
2018/03/31 Javascript
前后端如何实现登录token拦截校验详解
2018/09/03 Javascript
详解Vue.js自定义tipOnce指令用法实例
2018/12/19 Javascript
vue 项目@change多个参数传值多个事件的操作
2021/01/29 Vue.js
用Python进行行为驱动开发的入门教程
2015/04/23 Python
Python通用函数实现数组计算的方法
2019/06/13 Python
python IDLE 背景以及字体大小的修改方法
2019/07/12 Python
python编写计算器功能
2019/10/25 Python
使用python 的matplotlib 画轨道实例
2020/01/19 Python
python标准库sys和OS的函数使用方法与实例详解
2020/02/12 Python
解决python pandas读取excel中多个不同sheet表格存在的问题
2020/07/14 Python
PyCharm Community安装与配置的详细教程
2020/11/24 Python
anaconda升级sklearn版本的实现方法
2021/02/22 Python
HelloFresh奥地利:立即订购烹饪盒
2019/02/22 全球购物
物理教育专业毕业生推荐信
2013/11/03 职场文书
社会实践心得体会
2014/01/03 职场文书
教师政风行风评议心得体会
2014/10/21 职场文书
2019年第四季度财务部门工作计划
2019/11/02 职场文书
nginx配置限速限流基于内置模块
2022/05/02 Servers
详解Nginx的超时keeplive_timeout配置步骤
2022/05/25 Servers