大家好我是王大锤,我们老板给我一个任务,让我在任何有网络请求的地方,如果时间超过一秒就提示一个加载中的提示,好去捞客户的钱 。...但是我对着已经做得差不多定型的APP怀疑了整整一个下午人生,这尼玛坑爹啊,这都写完了,这么多地方呢,我得改到什么时候。...完美,然后我结合自己的网络请求封装,又开了一个 接口 →_→ import android.view.View; import com.xiaolei.easyfreamwork.network.common.SCallBack...rx.Observable; import rx.android.schedulers.AndroidSchedulers; import rx.functions.Action1; /** * 用于需要添加网络请求...配合你自己的网络请求框架或者封装,就可以做到一个提示。 ---- END.
大家好我是王大锤,我们老板给我一个任务,让我在任何有网络请求的地方,如果时间超过一秒就提示一个加载中的提示,好去捞客户的钱 。...但是我对着已经做得差不多定型的APP怀疑了整整一个下午人生,这尼玛坑爹啊,这都写完了,这么多地方呢,我得改到什么时候。...完美,然后我结合自己的网络请求封装,又开了一个 接口 →_→ import android.view.View; import com.xiaolei.easyfreamwork.network.common.SCallBack...rx.Observable; import rx.android.schedulers.AndroidSchedulers; import rx.functions.Action1; /** * 用于需要添加网络请求...配合你自己的网络请求框架或者封装,就可以做到一个提示。 END.
优点:传输数据无大小限制、准确可靠、先发先至(保证数据顺序) 缺点:传输速度慢、不能做离线任务、连接有耗时 应用场景:当对网络通讯质量有要求的时候,往往要求数据的准确无误,文件传输(FTP协议就是基于TCP...(SYN=1,ACK=y+1,seq=x+1) 三次握手详细解答地址 ==为什么 TCP 是三次握手而不是两次或者四次握手来建立连接?== 两次握手没办法确保客户端是不是已经收到了自己的同步信号。...HTTP协议是一个无状态的协议,同一个客户端的这次请求是独立的、和上次请求是没有对应关系。 优点:基于应用层的接口使用方便 缺点:1.传输速度慢,数据包大。...这个就像操作系统会提供标准的编程接口,比如win32编程接口一样,TCP/IP也要提供可供程序员做网络开发所用的接口,这就是Socket编程接口。 3....post 更安全,post 的请求参数放在 request body 中(请求参数不会作为URL的一部分get请求会,请求参数不会保存在浏览器的历史记录里get请求会) post 发送的数据更大(get
把 HTTP/1.1 每个请求都当作一个流,那么多个请求变成多个流,请求响应数据分成多个帧,不同流中的帧交错地发送给对方,这就是 HTTP/2 中的多路复用。...由于没有流的概念,在使用并行传输(多路复用)传递数据时,接收端在接收到响应后,并不能区分多个响应分别对应的请求,所以无法将多个响应的结果重新进行组装,也就实现不了多路复用。...第一次握手:客户端发送网络包,服务端收到了。这样服务端就能得出结论:客户端的发送能力。服务端的接收能力是正常的。 第二次握手:服务端发包,客户端收到了。...四次挥手 第一次挥手:主动关闭方发送一个FIN,用来关闭主动方到被动关闭方的数据传送,也就是主动关闭方告诉被动关闭方:我已经不 会再给你发数据了(当然,在fin包之前发送出去的数据,如果没有收到对应的ack...第四次挥手:主动关闭方收到 FIN后,发送一个ACK给被动关闭方,确认序号为收到序号+1,至此,完成四次挥手。 挥手为什么是四次?
3.3 设置请求头 xhr.setRequestHeader('Header','Value') 每个 HTTP 请求和响应都会带有相应的头部信息,包含一些与数据、收发者网络环境与状态等相关信息。...这里就用到前面讲过的 xhr.readyState 属性,readyState 会随着 AJAX 的进程而不断变化,我们可以通过 onreadystatechange() 去监听它的变化,进而判断何时收到服务器的响应结果...return in a second"); }; xhr.send(null); 注意:这时候很可能出现一种情况,就是超过1秒后浏览器没收到响应,因此终止了请求,而这时候恰好 xhr.status 为...load:在接收到完整的响应数据时触发 loadend:在通信完成或触发 error、abort、load 事件后触发 每个请求都从触发 loadstart 事件开始,接下来是一或多个 progress...AJAX 请求给 Bank.com,由于发送请求的时候,浏览器会自动在本地检索目标网站的 Cookie ,并添加到请求报文中,所以此时目标网站的 Cookie 被请求携带着发送过去了,而 Bank.com
在js中,通常情况下代码都是自上而下同步执行的,在同步执行代码时,如果有一段代码执行的速度特别慢,会造成程序卡顿的后果。...再者常见的就是向服务器发送请求,需要花费时间接受服务器返回的响应结果,对数据进行处理,因为网速和加载速度慢的原因,会带来不好的用户体验。...console.log(2); } fn1((result) => { console.log(result); }); 2.当异步过于复杂时,多个函数相互依赖时...("get", "https://api.q6q.cc/blog"); //3.发送当前的请求⾄指定的URL xhr.send(); //4.异步回调接收返回值并处理...1 (载入):已经调用open()方法,但尚未发送请求。 2 (载入完成): 请求已经发送完成。 3 (交互):可以接收到部分响应数据。 4 (完成):已经接收到了全部数据,并且连接已经关闭。 2.
cwnd 慢开始 cwnd >=ssthresh拥塞控制 1.慢开始 初始拥塞窗口cwnd=1,发送方只能发送1个数据报文(cwnd是几,就发送几个),接收方收到报文,发送1...(Forward)之间的区别 地址栏信息 : 重定向会显示转向以后的地址,而请求转发不会显示转向的地址 请求次数 : 重定向至少提交了两次请求 数据 : 请求转发对request对象的信息不会丢失,因此可以在多个页面交互过程中实现请求数据的共享...,客户端再自己去请求转向的地址,因此会显示转向后的地址,也可以理解为浏览器至少进行了两次的访问请求 速度 : 请求转发的速度远远快于重定向 请求转发和重定向的应用场景 1、重定向的速度比转发慢,因为浏览器还得发出一个新的请求...反向代理服务器会强制将外部网络对要代理的服务器的访问经过它,它会将从源服务器上获取到的静态内容缓存到本地,以便日后再收到同样的信息请求时,直接将本地缓存的内容发给客户端,减少后端web服务器的压力,提高响应速度...,该Cookie中会包含当前用户的信息,然后通过响应(响应头set-cookie)返回给浏览器端,cookie会保存在浏览器端 下次访问的时候,浏览器会携带服务器端创建的cookie(请求头cookie
请求还没有被发送 2 Sent Send() 方法已调用,HTTP 请求已发送到 Web 服务器。未接收到响应 3 Receiving 所有响应头部都已经接收到。...当 readyState 小于 3 的时候读取这一属性会导致一个异常。 ☞ statusText 这个属性用名称而不是数字指定了请求的 HTTP 的状态代码。...和 status 属性一样,当 readyState 小于 3 的时候读取这一属性会导致一个异常。...如果本次请求没有成功或者数据不完整,该属性等于 null ☞ responseText 目前为止为服务器接收到的响应体(不包括头部),或者如果还没有接收到数据的话,就是空字符串。...要特别注意,当这个方法调用的时候,实现通常不会打开一个到 Web 服务器的网络连接。 参数说明 ① method 参数是用于请求的 HTTP 方法。值包括 GET、POST。
3.3 设置请求头 xhr.setRequestHeader('Header','Value') 每个 HTTP 请求和响应都会带有相应的头部信息,包含一些与数据、收发者网络环境与状态等相关信息。...也就是说,我们需要加一层判断,确保收到服务器的响应结果之后,再去判断请求成功还是失败。...这里就用到前面讲过的 xhr.readyState 属性,readyState 会随着 AJAX 的进程而不断变化,我们可以通过 onreadystatechange() 去监听它的变化,进而判断何时收到服务器的响应结果...return in a second"); }; xhr.send(null); 注意:这时候很可能出现一种情况,就是超过1秒后浏览器没收到响应,因此终止了请求,而这时候恰好 xhr.status 为...load:在接收到完整的响应数据时触发 loadend:在通信完成或触发 error、abort、load 事件后触发 每个请求都从触发 loadstart 事件开始,接下来是一或多个 progress
ajax请求原理:创建一个网络请求对象 -> 发送连接请求 -> 发送请求数据 -> 检查网络请求对象的状态 -> 如果响应成功了 -> 浏览器接收返回数据并更新网页。...使用语法:open( method , url , async ) method:设置网络请求的类型,常用的 get 和 post url:设置请求的接口也就是服务器的地址 async:true时表示异步...3.3、提交方式 使用 get 方式提交 get发送请求时,需要传给后台的数据通过url来传递,多个参数之间使用 & 符号连接,使用时如下: xhr.opn( "GET" , "1.php?...当状态值为 4 时表示网络请求响应完毕,就可以获取返回的值。...responseText ---> 获取到的是字符串形式。接收到可直接使用,无需转换。
日常开发中一般都会使得ajax去获了数据,但有两点是需要值得注意的: 1、ajax请求队列 2、ajax的超时处理 为什么要注意这两点?为了让用户在其可视区域内更快速的看见内容。...,而可视范围之内(假设为第一屏)的模块却尚未开始接收数据,这一类应用如:搜狐博客、新浪博客、网易博客等… 既然是采用了队列,那么又会有一个新的问题:需要保证一个请求的时候不能太长,不能因为一个请求而导致后续的请求被阻塞了...) 在判定一个请求是否已经完成的时候,验证xhr的status有一点是需要注意的:“有的浏览器会错误地返回204状态码”,而IE(非原生的XHR对象)中会将204设置为1223,Opera会在取得204...< 300 ) || xhr.status === 304 || xhr.status === 1223 || xhr.status === 0 另外在send的时候,还需要注意的是如果不需要通过请求主体发送数据...而setTimeout中的fn函数,在处理时会先检测请求是否已经处理过了,这里它并没有对延时器进行引用,会导致的一种情况是,请求已经结束,延时器还在跑,直到达到指定的时间间隔。
Plugin 内部采用插件化的方式去实现,不同的插件采集不同的数据。比如如果我们想采集网络请求相关的数据,那个可以封装一个专门采集网络请求的插件。...Manager 会订阅 next 事件,而其他模块会订阅 assign 事件和 receive 事件。...最开始的时候,其他模块通过 assign 事件接收到 Manager 的实例,由此其他模块就可以使用 Manager 上定义的发布-订阅相关的方法。...不管是自己封装请求方法,还是直接使用类似于 axios 的 HTTP 请求库,都是需要基于 XHR 和 Fetch 去实现的。...当 xhr.readyState === XMLHttpRequest.DONE 时表示请求操作已经完成,这时候我们就可以记录请求的状态码和请求结束的时间。
为什么使用 Ajax? 在 Web 开发中,我们常常需要从服务器获取数据或向服务器发送数据,而传统的同步请求会导致整个页面的刷新,用户体验较差。...2:发送,已经调用 send 方法,但尚未接收到响应。 3:接收,已经接收到部分数据。 4:完成,已经接收到全部数据,而且已经可以在客户端使用。...因此,当我们的页面和请求的资源不符合同源策略时,就会涉及到跨域请求的问题。...Ajax 进阶:Fetch API 除了 XMLHttpRequest,现代浏览器还提供了 Fetch API,它是一种更现代、更强大的网络请求接口。下面是一个使用 Fetch API 的例子: 的 JavaScript 框架和库,如 Axios、jQuery 等,来简化网络请求的代码
中具体请求如下(Safari 自动将原请求和重定向合并为了 1 个请求记录): 当浏览器收到 3XX 的重定向状态码后,会自动对新的地址发起请求(也就是响应体中 Location 的地址)。...这里还发现了一个有意思的细节:Safari 在发起重定向请求时,虽然没有带上 Authorization 请求头,但是会带上 cookie,这也说明了为什么在改造为 JWT 之前,Safari 能正常使用的原因...不过好在,发现了一个另外的网络调试软件 Proxyman,看到他之后,有一种春天来了的感觉。...收到回复之后没多想,就立马着手准备代码。想着以最简单的方式复现,所以就用 Koa 来处理请求。...当时看到 manual 属性的时候,虽然描述看起来有点懵,但是想着可以手动处理重定向的请求,那肯定没毛病。
,绘制到用户界面上 处理不可见操作,网络请求,文件访问等 第三方插件进程 每种类型的插件对应一个进程,仅当使用该插件时才创建 GPU进程 用于3D绘制等 渲染进程,就是我们说的 浏览器内核 负责页面渲染...AJAX请求 当请求完成时,若有回调函数,通知事件触发线程 当我们了解了渲染进程包含的这些线程后,我们思考两个问题: 为什么 javascript 是单线程的 为什么 GUI 渲染线程与 JS 引擎线程互斥...前端开发中我们会通过 setTimeout/setInterval来指定定时任务,会通过 XHR/fetch发送网络请求, 接下来简述一下 setTimeout/setInterval和 XHR/fetch...当代码执行到 setTimeout/setInterval时,实际上是 JS引擎线程通知 定时触发器线程,间隔一个时间后,会触发一个回调事件, 而 定时触发器线程在接收到这个消息后,会在等待的时间后,将回调事件放入到由...当代码执行到 XHR/fetch时,实际上是 JS引擎线程通知 异步http请求线程,发送一个网络请求,并制定请求完成后的回调事件, 而 异步http请求线程在接收到这个消息后,会在请求成功后,将回调事件放入到由
而传统的网页(不使用 AJAX)如果需要更新内容,必需重载整个网页面。 还有为什么叫异步呢? 因为在加载的时候,页面的其他部分还是可以自由操作的,没有出现卡死的状态,所以是异步。...如果不幸由于网络太慢或者其他原因,就会得到一个404页面。 这就是Web的运作原理:一次HTTP请求对应一个页面。...如果要让用户留在当前页面中,同时发出新的HTTP请求,就必须用JavaScript发送这个新请求,接收到数据后,再用JavaScript更新页面,这样一来,用户就感觉自己仍然停留在当前页面,但是数据却可以不断地更新...readyState: xhr对象的状态改变时,readyState的值也会相应的改变。...其实,当 onreadystatechange 执行时 并且 readyState == 4 的时候,在 HTML5 中有了更加便捷的写法: xhr.onload = function () {
','index.xml',true); //3:发送请求 xhr.send(null); // 严谨写法 //4:监听请求,接受响应 xhr.onreadysatechange=function(){...在两数相加时,会先转换成二进制,0.1 和 0.2 转换成二进制的时候尾数会发生无限循环,然后进行对阶运算,JS 引擎对二进制进行截断,所以造成精度丢失。...Chrome浏览器的架构图: 从图中可以看出,最新的 Chrome 浏览器包括: 1 个浏览器主进程 1 个 GPU 进程 1 个网络进程 多个渲染进程 多个插件进程 这些进程的功能: 浏览器进程:主要负责界面显示...图片 服务器收到 HTTP 请求报文,看到上面的四个字段,就知道这不是一个普通的 GET 请求,而是 WebSocket 的升级请求,于是就不走普通的 HTTP 处理流程,而是构造一个特殊的“101 Switching...: 回显服务器收到的请求,主要⽤于测试或诊断。
一、前端进行网络请求的关注点 大多数情况下,在前端发起一个网络请求我们只需关注下面几点: 传入基本参数( url,请求方式) 请求参数、请求参数类型 设置请求头 获取响应的方式 获取响应头、响应状态、响应结果...()方法和 send()之间调用,用法: xhr.setRequestHeader(header, value); getResponseHeader 用于获取 http返回头,如果在返回头中有多个一样的名称...withCredentials ajax请求默认会携带同源请求的 cookie,而跨域请求则不会携带 cookie,设置 xhr的 withCredentials的属性为 true将允许携带跨域 cookie...尤雨溪在他的文档中推荐大家用 axios进行网络请求。 axios基于 Promise对原生的 XHR进行了非常全面的封装,使用方式也非常的优雅。...当网络故障时或请求被阻止时,才会标记为 reject,如跨域、 url不存在,网络异常等会触发 onerror。 所以使用fetch当接收到异常状态码都是会进入then而不是catch。
领取专属 10元无门槛券
手把手带您无忧上云