2020-10-18前端学习笔记 - ajax/fetch/axios/跨域 小灰灰 2022-12-16 05:56 127阅读 0赞 ### ajax中有几个常用方法 8个 ### ### get和post的区别 ### > GET: get、delete、head、options POST: post、put 在向服务器传递信息时,GET系列一般都是基于问号参数传递信息,POST一般都是基于请求主体传递信息 - GET 系列传递服务器信息大小有限制(URL的长度是存在限制的:IE ->2k)POST理论不存在限制,实际开发中自己会做限制 - GET系列会产生缓存,无法自己控制的缓存 - GET相对POST来讲也是不安全的 ### 常见的网络状态码及作用 ### + 200 成功 + 301 永久转移 + 302/307临时重定向(临时转移) + 304 协商缓存 + 400 参数错误 + 401 无权限访问 token失效 + 404 地址错误 + 500 未知服务器错误 + 503 服务器超负荷 ### 前后端数据通信过程中,常用的数据传输格式 ### + form-data 文件上传/表单提交... + x-www-form-urlencoded 经常使用(和问号参数格式一致) + raw ### $.ajax、axios、fetch区别 ### + $.ajax/axios核心机制:XMLHTTPRequest【AJAX】 + $.ajax JQ封装的方法,采用回调函数方式管理请求 + $.ajax({}); + axios基于promise管理异步数据请求 避免回调地狱 + axios.get('') + fetch是ES6中提供的新的数据请求方案,机制不再是XMLHttpRequest + 性能好一些,但兼容性很差 + 天生就是基于promise管理的 + response.status + 不管返回什么样的状态码,哪怕是500也算请求成功(只要服务器有响应就算请求成功) + 它认为的失败就是服务器没有任何响应(如断网) let xhr = new XMLHttpRequest; xhr.open('get', '/api_ajax'); xhr.onreadystatechange = () =>{ //xhr.readyState 记录ajax状态 0开始 1opend 2响应头返回信息给客户端 3加载中 4 响应主体已经回来(请求结束) //xhr.status HTTP状态码 200 成功 301/302/304 401/402/404 500/503 if(xhr.readyState ===4 && (xhr.status >= 200 && xhr.status < 300)){ } } //请求主体中传递的是各种格式的字符串或者是其他的值 //form-data let form1 = new FormData(); form1.append('lx', 0); form1.append('form', 'winxin'); xhr.send(form1) //x-www-form-urlencoded xhr.setRequestHeader('Content-Type', 'x-www-form-urlencoded'); xhr.send('lx=0&form=winxin'); //raw xhr.setRequestHeader('Content-Type', 'application-json'); xhr.send(JSON.stringify({ lx:0, form: 'winxin'})); //fetch基本用法 fetch('url?lx=0&from:winxin',{ method: 'GET', headers:{ } }).then(response =>{ if(response.status >= 300){ switch(response.status){ case 400: break; } return response.reject(response); } return response.json(); }).then(res => { console.log(res); }).catch(err => { if(!navigator.onLine){ //断网 } }); fetch('url?lx=0&from:winxin',{ method: 'POST', headers:{ }, body:'lx=0&from=winxin' }).then(response =>{ return response.json(); }).then(res => { console.log(res); }); ### 常用的3中跨域方案: ### * jsonp:已过时,偶尔会用:利用了script不存在跨域限制 * 客户端基于script向服务端发送一个请求,把客户端的一个全局函数传递给服务器 * 服务端把数据和这个传递的函数拼合成为‘函数(数据)’浏览器默认就把函数执行了从而拿到数据 * 只能是get请求 * 自己封装:动态创建script,动态创建全局函数,发送请求 //必须是全局函数 function fn(result){ console.log(result); } <script src='url?callback=fn' /> * cors: 浏览器和服务器有安全限制,但我们自己可以绕过限制,在服务器端设定运行哪一个外部源可以向当前服务器发请求 * proxy: 向本地一个服务发送请求(webpack-dev-server),然后本地服务帮我们代理到真实服务器上(服务器与服务器之间不存在跨域) * 在开发环境下,vue/ract脚手架生成的项目都是支持webpack-dev-server完成的 * 生产环境没有webpack-dev-server,基于部署web服务器的工具可以实现代理(nginx配置项/lis/apach) * … //web服务器(页面) VS 数据服务器(API) // + 协议 // + 域名 // + 端口号 // 三者中有一个不同都是跨域 // 项目中80%都是跨域 // + 服务器分开部署,Web服务器/数据服务器 // + 请求第三方平台 (async () => { let result = await fetch('url',{ //fetch跨域设置 credentials: 'same-origin(同源)/moit(禁止)/include(允许跨域中携带资源凭证)' }).then(); })() //服务端 //Access-Control-Allow-Origin: */单一源 // + * 不允许携带资源凭证(如cookie)不安全很多功能不能用 // + 单一源 运行携带资源凭证, Access-Control-Allow-Credentials: true // + 解决:每一次接收请求都看一下请求源 // + 动态修改Access-Control-Allow-Origin可以做黑白名单 //客户端在基于CORS跨域时,首先会发送一个试探请求,
相关 前端跨域调用 . 前端跨域调用的流程 以csdn为例 ![watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6... 逃离我推掉我的手/ 2024年04月19日 15:07/ 0 赞/ 80 阅读
相关 前端跨域 什么是跨域 同源策略是一种约定,它是浏览器的最核心也是最安全的功能,如果缺少同源策略,浏览器很容易受到xss,csrf等攻击。所谓的同源的就是“协议+域名+端口”,即使两个 ╰+攻爆jí腚メ/ 2023年01月07日 07:21/ 0 赞/ 231 阅读
相关 前端跨域案例 [vue解决跨域方法][vue] 什么是跨域 跨域指浏览器不允许当前页面的所在的源去请求另一个源的数据。源指协议,端口,域名。只要这个3个中有一个不同就是 「爱情、让人受尽委屈。」/ 2023年01月05日 12:09/ 0 赞/ 169 阅读
相关 2020-10-18前端学习笔记 - ajax/fetch/axios/跨域 ajax中有几个常用方法 8个 get和post的区别 > GET: get、delete、head、options POST: post、put 小灰灰/ 2022年12月16日 05:56/ 0 赞/ 128 阅读
相关 前端解决跨域 跨域:在浏览器里面当协议、域名、端口有任何一项不同的时候就会产生跨域 处理跨域的方式:JsonP(只能处理get请求)、cors(后端开启)、代理服务器 前两种已经在之前 男娘i/ 2022年12月02日 01:00/ 0 赞/ 238 阅读
相关 前端跨域问题 跨域 1、域名地址组成 域名组成图如下:域名组成.png ![这里写图片描述][SouthEast] 当协议、主域名、端口号中任意一个不相同 不念不忘少年蓝@/ 2022年07月12日 12:36/ 0 赞/ 280 阅读
相关 前端跨域访问 一、同源策略 做过开发的都知道,从A网站通过Ajax来请求另外一个B网站的特定内容,是很常见的需求,但是出于安全的考虑,浏览器是不允许你这样做的,这就是浏览器的同源策略; 曾经终败给现在/ 2022年06月14日 01:44/ 0 赞/ 284 阅读
相关 前端跨域相关 转自:[前端跨域(全)][Link 1] 什么是跨域? 跨域是指一个域下的文档或脚本试图去请求另一个域下的资源,这里跨域是广义的。 广义的跨域: 布满荆棘的人生/ 2022年05月29日 09:16/ 0 赞/ 261 阅读
相关 前端跨域 什么是跨域? 跨域,指的是浏览器不能执行其他网站的脚本。它是由ajax网络通信限制造成的,是浏览器施加的安全限制。 所谓同源是指,域名,协议,端口均相同,不明白没关系,举 今天药忘吃喽~/ 2022年04月22日 01:54/ 0 赞/ 282 阅读
相关 前端跨域 前端跨域 一、什么是跨域 二、网址解析: 三、解决跨域 1.src 2.jsonp 3.jq中的jsonp 雨点打透心脏的1/2处/ 2021年09月07日 06:09/ 0 赞/ 446 阅读
还没有评论,来说两句吧...