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实现心算练习代码
Dec 06 Javascript
javascript插入样式实现代码
Feb 22 Javascript
JavaScript实现GriwView单列全选(自写代码)
May 13 Javascript
json格式的时间显示为正常年月日的方法
Sep 08 Javascript
javascript获取元素偏移量的方法有哪些
Jun 24 Javascript
jQuery设置聚焦并使光标位置在文字最后的实现方法
Aug 02 Javascript
Jquery 整理元素选取、常用方法一览表
Nov 26 Javascript
vue.js 使用v-if v-else发现没有执行解决办法
May 15 Javascript
微信小程序-滚动消息通知的实例代码
Aug 03 Javascript
使用Vue.js和Flask来构建一个单页的App的示例
Mar 21 Javascript
微信小程序实现多行文字超出部分省略号显示功能
Oct 23 Javascript
js实现星星海特效的示例
Sep 28 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中用hash实现的数组
2011/07/17 PHP
php socket客户端及服务器端应用实例
2014/07/04 PHP
ThinkPHP自动填充实现无限级分类的方法
2014/08/22 PHP
php array_key_exists() 与 isset() 的区别
2016/10/24 PHP
php 数组处理函数extract详解及实例代码
2016/11/23 PHP
PHP实现创建一个RPC服务操作示例
2020/02/23 PHP
利用ASP发送和接收XML数据的处理方法与代码
2007/11/13 Javascript
jquery设置元素的readonly和disabled的写法
2013/09/22 Javascript
javascript中全局对象的parseInt()方法使用介绍
2013/12/19 Javascript
使用JS取得焦点(focus)元素代码
2014/03/22 Javascript
nodejs 整合kindEditor实现图片上传
2015/02/03 NodeJs
基于jQuery下拉选择框插件支持单选多选功能代码
2016/06/07 Javascript
jquery把int类型转换成字符串类型的方法
2016/10/07 Javascript
vuejs父子组件通信的问题
2017/01/11 Javascript
js 获取今天以及过去日期
2017/04/11 Javascript
Vue进度条progressbar组件功能
2018/04/17 Javascript
聊聊Vue中provide/inject的应用详解
2019/11/10 Javascript
Vuejs中的watch实例详解(监听者)
2020/01/05 Javascript
微信小程序全选多选效果实现代码解析
2020/01/21 Javascript
Python实用技巧之利用元组代替字典并为元组元素命名
2018/07/11 Python
Python字符串逆序输出的实例讲解
2019/02/16 Python
flask应用部署到服务器的方法
2019/07/12 Python
Django 开发调试工具 Django-debug-toolbar使用详解
2019/07/23 Python
浅谈CSS3 box-sizing 属性 有趣的盒模型
2019/04/02 HTML / CSS
详解利用canvas实现环形进度条的方法
2019/06/12 HTML / CSS
天美时手表加拿大官网:Timex加拿大
2016/09/01 全球购物
德国百年厨具品牌WMF美国站:WMF美国
2016/09/12 全球购物
KIEHL’S科颜氏官方旗舰店:源自美国的顶级护肤品牌
2018/06/07 全球购物
英语专业毕业个人求职自荐信
2013/09/21 职场文书
幼儿园安全检查制度
2014/01/30 职场文书
学习雷锋精神心得体会范文
2014/03/12 职场文书
见习期自我鉴定范文
2014/03/19 职场文书
小学生运动会报道稿
2014/09/12 职场文书
员工规章制度范本
2015/08/07 职场文书
2020年元旦晚会策划书模板
2019/12/30 职场文书
TypeScript 内置高级类型编程示例
2022/09/23 Javascript