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 相关文章推荐
HTML长文本截取含有HTML代码同样适用的两种方法
Jul 31 Javascript
js检验密码强度(低中高)附图
Jun 05 Javascript
用console.table()调试javascript
Sep 04 Javascript
angularjs指令中的compile与link函数详解
Dec 06 Javascript
jquery获取所有选中的checkbox实现代码
May 26 Javascript
Jquery ajax请求导出Excel表格的实现代码
Jun 08 Javascript
angularjs实现搜索的关键字在正文中高亮出来
Jun 13 Javascript
详解layui弹窗父子窗口之间传参数的方法
Jan 16 Javascript
Angular CLI 使用教程指南参考小结
Apr 10 Javascript
实例详解vue中的$root和$parent
Apr 29 Javascript
微信小程序 checkbox使用实例解析
Sep 09 Javascript
详解ECMAScript2019/ES10新属性
Dec 06 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
第十二节 类的自动加载 [12]
2006/10/09 PHP
php 什么是PEAR?(第二篇)
2009/03/19 PHP
windows服务器中检测PHP SSL是否开启以及开启SSL的方法
2014/04/25 PHP
php使用file函数、fseek函数读取大文件效率对比分析
2016/11/04 PHP
PHP缩略图生成和图片水印制作
2017/01/07 PHP
js跨域和ajax 跨域问题的实现思路
2009/09/05 Javascript
JavaScript浏览器选项卡效果
2010/08/25 Javascript
JS获取各种浏览器窗口大小的方法
2014/01/14 Javascript
node.js入门教程
2014/06/01 Javascript
javascript将DOM节点添加到文档的方法实例分析
2015/08/04 Javascript
浏览器环境下JavaScript脚本加载与执行探析之动态脚本与Ajax脚本注入
2016/01/19 Javascript
温习Javascript基础语法之词法结构
2016/05/31 Javascript
ES6中的数组扩展方法
2016/08/26 Javascript
微信小程序 支付简单实例及注意事项
2017/01/06 Javascript
在 Angular 中实现搜索关键字高亮示例
2017/03/21 Javascript
BootStrap中jQuery插件Carousel实现轮播广告效果
2017/03/27 jQuery
详解JS转换数值函数Number()、parseInt()、parseFloat()
2018/08/24 Javascript
微信小程序页面缩放式侧滑效果的实现代码
2018/11/15 Javascript
elementUI table表格动态合并的示例代码
2019/05/15 Javascript
vue+element 实现商城主题开发的示例代码
2020/03/26 Javascript
[03:49]2016完美“圣”典风云人物:AMS专访
2016/12/06 DOTA
python对数组进行反转的方法
2015/05/20 Python
python3实现读取chrome浏览器cookie
2016/06/19 Python
Python实现FTP上传文件或文件夹实例(递归)
2017/01/16 Python
python2和python3在处理字符串上的区别详解
2019/05/29 Python
pandas DataFrame 行列索引及值的获取的方法
2019/07/02 Python
美国女性卫生用品公司:Thinx
2017/06/30 全球购物
英国计算机产品零售商:Novatech(定制个人电脑、笔记本电脑、工作站和服务器)
2018/01/28 全球购物
公司财务工作总结的自我评价
2013/11/23 职场文书
精彩的广告词
2014/03/19 职场文书
县政府领导班子四风问题对照检查材料思想汇报
2014/09/26 职场文书
学校总务处领导干部个人对照检查材料思想汇报
2014/10/06 职场文书
公司员工辞职信范文
2015/05/12 职场文书
大学生先进个人主要事迹材料
2015/11/04 职场文书
推普标语口号大全
2015/12/26 职场文书
Python3 使用pip安装git并获取Yahoo金融数据的操作
2021/04/08 Python